跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

加快npm-ci公司通过缓存节点_模块 #45932

已合并
将8个提交合并到
2023年3月16日

对话

凯文940726
复制链接
成员

@凯文940726 凯文940726 评论2022年11月21日

什么?

通过缓存加快CI管道节点_模块.

为什么?

更快的CI===更快乐的开发人员?❤️
#33532,#44679以及其他类似的性能相关问题。

这位官员设置-节点默认情况下,操作仅缓存全局缓存(~/.npm单位*nix)。然而,安装所有软件包仍需要大约2分钟每一个工作流。通过同时缓存节点_模块,我们可以大幅减少75%的安装时间。

请注意,在官方文件中未推荐的缓存节点_模块.

注意:不建议缓存节点_模块,因为它可以突破Node版本,无法与npm-ci公司

然而,

  1. 我们很少更改Node版本。
  2. 它不适合npm-ci公司因为npm-ci公司将删除节点_模块安装模块之前。我们可以简单地避免跑步npm-ci公司如果有缓存命中。

TBH,我真的不知道为什么它不是一个既定的模式。也许有人更清楚?

怎么用?

我正在将步骤抽象为复合作用打电话设置-节点它大致执行以下操作:

  1. 将Node.js设置为所需版本。
  2. 缓存全局npm缓存(~/.npm)以加快下载时间。
  3. 隐藏物节点_模块以加快安装时间。
  4. 如果第3步中缓存丢失,请运行npm-ci—忽略脚本下载模块。
  5. 重新生成依赖项(npm重建)如有必要。
  6. 运行npm运行后安装.

然后,我们只需更换每个操作/设置模式+npm-ci公司用这个复合动作设置-节点在每个工作流中。请注意,如果工作流不需要运行,则此操作没有帮助npm-ci公司尽管如此。好的是这样的工作流可以继续使用原始的操作/设置模式因为它们共享相同的全局npm缓存。

测试说明

可以通过比较工作流中的安装时间来验证结果。

一个例子运行在此公关中1米57秒在缓存丢失时运行复合操作。重新运行作业,然后20秒在缓存命中时运行相同的合成操作。

将其与大旅行箱.等效动作组合(操作/设置模式+npm-ci公司)采取2米5秒缓存命中时运行。我们可以用有限的源数据绘制下表:

步长(秒) 缓存未命中 缓存命中率
仅缓存全局npm缓存(大旅行箱) 138秒 125秒
同时缓存节点_模块(本公关) 117秒1 20秒

尽管有时运行的持续时间会有很大差异,但性能改进仍不容置疑。

权衡

改进显然不是免费的,总是要付出代价的。在这种情况下,主要成本是缓存大小。原始全局npm缓存的大小为(大约)2.70亿每个键。除此之外,本公关还增加了2.70亿属于节点_模块每个键的缓存。因为节点_模块无法跨不同的操作系统或节点版本工作,我们还必须缓存它们窗户,macOS操作系统等。他们正在累积,很快就会超过10 GB阈值存储库中的最大缓存大小.

在撰写本文时,我们目前有77个缓存(数着这些节点_模块缓存),使用最少的缓存只有3天。如果我们不小心,可能会导致缓存抖动,并破坏缓存的整个目的。

一个可能的解决方案是避免缓存节点_模块或者在一些不常用的情况下回退到通用缓存。例如,我们可以尝试将所有操作系统分组到同一个密钥中,但要求Windows和macOS始终重新运行npm重建恢复缓存后。这同样也适用于不同的Node版本。不过,这种技术可能不安全,如果缓存失败,可能会导致贡献者混淆。

尽管如此,我认为额外的1GB缓存仍然值得节省时间。我们可以监视这些缓存的影响一段时间来确定。

屏幕截图或屏幕广播

形象

脚注

  1. 下面有一个后操作1米29秒。当多个作业尝试保存同一缓存时,可能会出现竞争条件问题。

@凯文940726 凯文940726补充这个GitHub操作 更新GitHub操作代码的Pull请求标签2022年11月21日
@代码沙盒
复制链接

代码沙盒 机器人程序 评论2022年11月21日

CodeSandbox徽标CodeSandbox徽标在CodeSandbox中打开Web编辑器|VS代码|VS代码内幕人士

@github-操作
复制链接

github-操作 机器人程序 评论2022年11月21日

尺寸变化:+223亿(0%)

总大小:1.34 MB

文件名 大小 更改
build/block-editor/index.min.js 197千字节 +50亿(0%)
构建/块库/index.min.js 201千字节 +61亿(0%)
构建/core-data/index.min.js 16.3千巴 +48亿(0%)
build/edit-post/index.min.js 34.8千字节 -2亿(0%)
构建/编辑-发布/样式-rtl.css 7.55千字节 +18亿(0%)
构建/编辑-发布/样式.css 7.54千字节 +17亿(0%)
build/edit-site/index.min.js 64.9千字节 -3亿(0%)
构建/编辑site/style-rtl.css 10.1千字节 +80亿(0%)
构建/编辑site/style.css 10.1千字节 +8 B(0%)
build/edit-widgets/style-rtl.css 4.56千巴 +9亿(0%)
build/edit-widgets/style.css 4.56千字节 +9亿(0%)
ℹ️查看未更改
文件名 大小
构建/a11y/index.min.js 993亿
build/annotations/index.min.js 2.78千字节
构建/api-fetch/index.min.js 2.27千字节
构建/auto/index.min.js 2.15千字节
build/blob/index.min.js 483亿
build/block目录/index.min.js 7.2千字节
构建/块目录/样式-rtl.css 1.04千字节
构建/块目录/样式.css 1.04千字节
build/block-editor/content-rtl.css 4.11千字节
构建/块编辑器/内容.css 4.1千字节
构建/块编辑器/默认编辑器样式-rtl.css 403亿
构建/块编辑器/默认编辑器样式.css 403亿
build/block-editor/style-rtl.css 14.4千字节
构建/块编辑器/样式.css 14.4千字节
build/block-library/blocks/archives/editor-rtl.css 61亿
构建/块库/blocks/archives/editor.css 60亿
build/block-library/blocks/archives/style-rtl.css 90亿
build/block-library/blocks/archives/style.css 90亿
build/block-library/blocks/audio/editor-rtl.css 150亿
build/block-library/blocks/audio/editor.css 150亿
build/block-library/blocks/audio/style-rtl.css 122亿
build/block-library/blocks/audio/style.css 122亿
构建/block-library/blocks/audio/theme-rtl.css 138亿
构建/block-library/blocks/audio/theme.css 138亿
构建/块库/blocks/avatar/editor-rtl.css 116亿
构建/块库/blocks/avatar/editor.css 116亿
build/block-library/blocks/avatar/style-rtl.css 91亿
build/block-library/blocks/avatar/style.css 91亿
build/block-library/blocks/block/editor-rtl.css 305亿
build/block-library/blocks/block/editor.css 305亿
build/block-library/blocks/button/editor-rtl.css 587亿
build/block-library/blocks/button/editor.css 587亿
build/block-library/blocks/button/style-rtl.css 628亿
build/block-library/blocks/button/style.css 627亿
构建/块库/blocks/buttons/editor-rtl.css 337亿
build/block-library/blocks/buttons/editor.css 337亿
build/block-library/blocks/buttons/style-rtl.css 332亿
build/block-library/blocks/buttons/style.css 332亿
构建/块库/blocks/calendar/style-rtl.css 239亿
build/block-library/blocks/calendar/style.css 239亿
build/block-library/blocks/categories/editor-rtl.css 84亿
build/block-library/blocks/categories/editor.css 83亿
build/block-library/blocks/categories/style-rtl.css 100亿
build/block-library/blocks/categories/style.css 100亿
build/block-library/blocks/code/editor-rtl.css 53亿
build/block-library/blocks/code/editor.css 53亿
build/block-library/blocks/code/style-rtl.css 121亿
build/block-library/blocks/code/style.css 121亿
build/block-library/blocks/code/theme-rtl.css 124亿
构建/block-library/blocks/code/theme.css 124亿
build/block-library/blocks/columns/editor-rtl.css 108亿
build/block-library/blocks/columns/editor.css 108亿
build/block-library/blocks/columns/style-rtl.css 406亿
build/block-library/blocks/columns/style.css 406亿
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125亿
build/block-library/blocks/comment-author-avatar/editor.css 125亿
build/block-library/blocks/comment-content/style-rtl.css 92亿
build/block-library/blocks/comment-content/style.css 92亿
build/block-library/blocks/comment-template/style-rtl.css 199亿
build/block-library/blocks/comment-template/style.css 198亿
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123亿
build/block-library/blocks/comments-pagination-numbers/editor.css 121亿
构建/块库/blocks/comments分页/editor-rtl.css 222亿
build/block-library/blocks/comments-pageination/editor.css 209亿
build/block-library/blocks/comments-pagination/style-rtl.css 235亿
build/block-library/blocks/comments-pageination/style.css 231亿
build/block-library/blocks/comments-title/editor-rtl.css 75亿
build/block-library/blocks/comments-title/editor.css 75亿
build/block-library/blocks/comments/editor-rtl.css 840亿
build/block-library/blocks/comments/editor.css 839亿
build/block-library/blocks/comments/style-rtl.css 637亿
build/block-library/blocks/comments/style.css 636亿
build/block-library/blocks/cover/editor-rtl.css 612亿
build/block-library/blocks/cover/editor.css 613亿
build/block-library/blocks/cover/style-rtl.css 1.6千字节
构建/块库/blocks/cover/style.css 1.59千字节
build/block-library/blocks/embed/editor-rtl.css 293亿
build/block-library/blocks/embed/editor.css 293亿
build/block-library/blocks/embed/style-rtl.css 410亿
build/block-library/blocks/embed/style.css 410亿
构建/block-library/blocks/embed/theme-rtl.css 138亿
build/block-library/blocks/embed/theme.css 138亿
build/block-library/blocks/file/editor-rtl.css 300亿
build/block-library/blocks/file/editor.css 300亿
build/block-library/blocks/file/style-rtl.css 265亿
构建/块库/blocks/file/style.css 265亿
build/block-library/blocks/file/view.min.js 353亿
build/block-library/blocks/freeform/editor-rtl.css 2.44千字节
build/block-library/blocks/freeform/editor.css 2.44千字节
build/block-library/blocks/galletry/editor-rtl.css 984亿
构建/块库/blocks/gallery/editor.css 988亿
build/block-library/blocks/gallower/style-rtl.css 1.55千字节
build/block-library/blocks/gallower/style.css 1.55千字节
build/block-library/blocks/gallower/theme-rtl.css版本 122亿
构建/block-library/blocks/gallery/theme.css 122亿
build/block-library/blocks/group/editor-rtl.css 654亿
build/block-library/blocks/group/editor.css 654磅
build/block-library/blocks/group/style-rtl.css 57亿
构建/块库/blocks/group/style.css 57亿
构建/块-库/块/组/主题-rtl.css 78亿
构建/块-库/块/组/主题.css 78亿
build/block-library/blocks/heading/style-rtl.css 76亿
构建/块库/blocks/heading/style.css 76亿
build/block-library/blocks/html/editor-rtl.css 332亿
build/block-library/blocks/html/editor.css 333亿
build/block-library/blocks/image/editor-rtl.css 830亿
build/block-library/blocks/image/editor.css 829亿
build/block-library/blocks/image/style-rtl.css 652亿
build/block-library/blocks/image/style.css 652亿
构建/block-library/blocks/image/theme-rtl.css 137亿
构建/block-library/blocks/image/theme.css 137亿
build/block-library/blocks/latest-comments/style-rtl.css 357亿
build/block-library/blocks/latest-comments/style.css 357亿
build/block-library/blocks/platest-posts/editor-rtl.css 213亿
build/block-library/blocks/platest-posts/editor.css 212亿
build/block-library/blocks/platest-posts/style-rtl.css 478亿
构建/块库/blocks/latest posts/style.css 478亿
build/block-library/blocks/list/style-rtl.css 88亿
build/block-library/blocks/list/style.css 88亿
build/block-library/blocks/media-text/editor-rtl.css 266亿
build/block-library/blocks/media-text/editor.css 263磅
构建/块库/blocks/media-text/style-rtl.css 507亿
build/block-library/blocks/media-text/style.css 505亿
构建/block-library/blocks/more/editor-rtl.css 431亿
build/block-library/blocks/more/editor.css 431亿
build/block-library/blocks/navigation-link/editor-rtl.css 716磅
构建/块库/块/导航链接/editor.css 715亿
build/block-library/blocks/navigation-link/style-rtl.css 115亿
build/block-library/blocks/navigation-link/style.css 115亿
build/block-library/blocks/navigation-submenu/editor-rtl.css 299亿
build/block-library/blocks/navigation-submenu/editor.css 299亿
build/block-library/blocks/navigation/editor-rtl.css 2.13千字节
build/block-library/blocks/navigation/editor.css 2.14千字节
build/block-library/blocks/navigation/style-rtl.css 2.22千字节
build/block-library/blocks/navigation/style.css 2.2千字节
build/block-library/blocks/navigation/view-modal.min.js 2.81千字节
build/block-library/blocks/navigation/view.min.js 447亿
build/block-library/blocks/nextpage/editor-rtl.css 395亿
build/block-library/blocks/nextpage/editor.css 395亿
构建/块库/blocks/page-list/editor-rtl.css 401亿
build/block-library/blocks/page-list/editor.css 401亿
build/block-library/blocks/page-list/style-rtl.css 175亿
build/block-library/blocks/page-list/style.css 175亿
build/block-library/blocks/pragment/editor-rtl.css 174亿
build/block-library/blocks/pragment/editor.css 174亿
build/block-library/blocks/pragment/style-rtl.css 279亿
build/block-library/blocks/pragment/style.css 281亿
构建/块库/blocks/post-author/style-rtl.css 175亿
build/block-library/blocks/post-author/style.css 176亿
build/block-library/blocks/post-comments-form/editor-rtl.css 96亿
build/block-library/blocks/post-comments-form/editor.css 96亿
build/block-library/blocks/post-comments-form/style-rtl.css 501乙
build/block-library/blocks/post-comments-form/style.css 501乙
build/block-library/blocks/post-date/style-rtl.css 61亿
build/block-library/blocks/post-date/style.css 61亿
构建/块库/blocks/post摘录/editor-rtl.css 71亿
build/block-library/blocks/post-extract/editor.css 71个B
build/block-library/blocks/post-extract/style-rtl.css 134亿
build/block-library/blocks/post-extract/style.css 134磅
build/block-library/blocks/post-featured-image/editor-rtl.css 586亿
build/block-library/blocks/post-featured-image/editor.css 584亿
build/block-library/blocks/post-featured-image/style-rtl.css 322亿
build/block-library/blocks/post-featured-image/style.css 322亿
build/block-library/blocks/post-navigation-link/style-rtl.css 153亿
build/block-library/blocks/post-navigation-link/style.css 153亿
build/block-library/blocks/post-template/editor-rtl.css 99亿
build/block-library/blocks/post-template/editor.css 98亿
build/block-library/blocks/post-template/style-rtl.css 282亿
build/block-library/blocks/post-template/style.css 282亿
构建/块库/blocks/post-terms/style-rtl.css 96亿
build/block-library/blocks/post-terms/style.css 96亿
build/block-library/blocks/post-title/style-rtl.css 100亿
build/block-library/blocks/post-title/style.css 100亿
build/block-library/blocks/preactatted/style-rtl.css 103亿
build/block-library/blocks/preactatted/style.css 103亿
build/block-library/blocks/pullquote/editor-rtl.css 135亿
build/block-library/blocks/pullquote/editor.css 135亿
构建/块库/块/pullquote/style-rtl.css 326亿
build/block-library/blocks/pullquote/style.css 325亿
build/block-library/blocks/pullquote/theme-rtl.css 167亿
构建/block-library/blocks/pullquote/theme.css 167亿
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122亿
build/block-library/blocks/query-pagination-numbers/editor.css 121亿
build/block-library/blocks/query-pagination/editor-rtl.css 221亿
build/block-library/blocks/query-pagination/editor.css 211亿
build/block-library/blocks/query-pagination/style-rtl.css 288亿
build/block-library/blocks/query-pagination/style.css 284亿
build/block-library/blocks/query-title/style-rtl.css 63亿
build/block-library/blocks/query-title/style.css 63亿
build/block-library/blocks/query/editor-rtl.css 463亿
build/block-library/blocks/query/editor.css 463亿
构建/块库/blocks/quote/style-rtl.css 222亿
build/block-library/blocks/quote/style.css 222亿
build/block-library/blocks/quote/theme-rtl.css 223亿
构建/block-library/blocks/quote/theme.css 226亿
build/block-library/blocks/read-more/style-rtl.css 132亿
构建/块库/blocks/read-more/style.css 132亿
build/block-library/blocks/rss/editor-rtl.css 149亿
build/block-library/blocks/rss/editor.css 149亿
build/block-library/blocks/rss/style-rtl.css 289亿
build/block-library/blocks/rss/style.css 288亿
build/block-library/blocks/search/editor-rtl.css 165亿
build/block-library/blocks/search/editor.css 165亿
build/block-library/blocks/search/style-rtl.css 409亿
build/block-library/blocks/search/style.css 406亿
构建/block-library/blocks/search/theme-rtl.css 114亿
构建/block-library/blocks/search/theme.css 114亿
build/block-library/blocks/seleparator/editor-rtl.css 146亿
build/block-library/blocks/seleparator/editor.css 146亿
build/block-library/blocks/seleparater/style-rtl.css 234亿
build/block-library/blocks/seleparater/style.css 234亿
build/block-library/blocks/seleparater/theme-rtl.css 194亿
build/block-library/blocks/seleparater/theme.css 194磅
构建/块库/blocks/shortcode/editor-rtl.css 474亿
build/block-library/blocks/shortcode/editor.css 474磅
build/block-library/blocks/site-logo/editor-rtl.css 489亿
build/block-library/blocks/site-logo/editor.css 489亿
build/block-library/blocks/site-logo/style-rtl.css 203亿
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86亿
build/block-library/blocks/site-tagline/editor.css 86亿
build/block-library/blocks/site-title/editor-rtl.css 116亿
构建/块库/块/站点标题/编辑器.css 116亿
build/block-library/blocks/site-title/style-rtl.css 57亿
build/block-library/blocks/site-title/style.css 57亿
build/block-library/blocks/social-link/editor-rtl.css 184亿
build/block-library/blocks/social-link/editor.css 184亿
build/block-library/blocks/social-links/editor-rtl.css 674亿
build/block-library/blocks/social-links/editor.css 673亿
构建/block-library/blocks/social-links/style-rtl.css 1.4千字节
build/block-library/blocks/social-links/style.css 1.39千字节
build/block-library/blocks/spacer/editor-rtl.css 332亿
build/block-library/blocks/spacer/editor.css 332亿
build/block-library/blocks/spacer/style-rtl.css 48亿
build/block-library/blocks/spacer/style.css 48亿
build/block-library/blocks/table/editor-rtl.css 433亿
build/block-library/blocks/table/editor.css 433亿
build/block-library/blocks/table/style-rtl.css 651亿
build/block-library/blocks/table/style.css 650亿
构建/block-library/blocks/table/theme-rtl.css 157亿
build/block-library/blocks/table/theme.css 157亿
build/block-library/blocks/tag-cloud/style-rtl.css 251亿
build/block-library/blocks/tag-cloud/style.css 253亿
build/block-library/blocks/template-part/editor-rtl.css 404亿
build/block-library/blocks/template-part/editor.css 404亿
build/block-library/blocks/template-part/theme-rtl.css 101亿
build/block-library/blocks/template-part/theme.css 101亿
build/block-library/blocks/text-columns/editor-rtl.css 95亿
构建/块库/块/文本列/editor.css 95亿
build/block-library/blocks/text-columns/style-rtl.css 166亿
build/block-library/blocks/text-columns/style.css 166亿
build/block-library/blocks/verse/style-rtl.css 99亿
构建/块库/blocks/verse/style.css 99亿
build/block-library/blocks/video/editor-rtl.css 552亿
build/block-library/blocks/video/editor.css 555亿
build/block-library/blocks/video/style-rtl.css 179亿
build/block-library/blocks/video/style.css 179亿
构建/block-library/blocks/video/theme-rtl.css 139亿
build/block-library/blocks/video/theme.css 139亿
build/block-library/classic-rtl.css 179亿
build/block-library/csss 179亿
build/block-library/common-rtl.css 1.11千字节
build/block-library/common.css 1.11千字节
build/block-library/editor-elements-rtl.css 75亿
build/block-library/editor-elements.css 75亿
build/block-library/editor-rtl.css 11.6千字节
build/block-library/editor.css 11.6千字节
构建/块-库/元素-rtl.css 54亿
build/block-library/elements.css 54磅
build/block-library/reset-rtl.css 478亿
build/block-library/reset.css 478亿
build/block-library/style-rtl.css 12.7千字节
build/block-library/style.css 12.7千字节
构建/块-库/theme-rtl.css 698亿
构建/块-库/theme.css 703亿
build/block-serialization-default-parser/index.min.js 1.13千字节
build/block-serialization-specifi-parser/index.min.js 2.83千字节
build/blocks/index.min.js 51千字节
build/components/index.min.js 208千字节
build/components/style-rtl.css 11.7千字节
build/components/style.css 11.7千字节
构建/合成/索引.min.js 12.4千字节
构建/定制e-widgets/index.min.js 12.2千字节
构建/定制e-widgets/style-rtl.css 1.41千字节
构建/定制e-widgets/style.css 1.41千字节
构建/数据控制/索引.min.js 663亿
build/data/index.min.js版本 8.58千字节
构建/日期/索引.min.js 40.4千字节
build/deprecated/index.min.js 518亿
构建/dom-ready/index.min.js 336亿
构建/dom/index.min.js 4.72千字节
构建/编辑-发布/分类-rtl.css 571亿
构建/编辑post/classic.css 571亿
build/edit-widgets/index.min.js 17.3千字节
build/editor/index.min.js 45.8千字节
构建/编辑器/样式-rtl.css 3.54千字节
构建/编辑器/样式.css 3.53千字节
build/element/index.min.js 4.95千字节
构建/转义html/index.min.js 548亿
build/format-library/index.min.js 7.26千字节
build/format-library/style-rtl.css 557亿
构建/格式库/样式.css 556磅
build/hooks/index.min.js 1.66千字节
build/html-entities/index.min.js 454磅
构建/i18n/index.min.js 3.79千字节
构建/is-shallow-equal/index.min.js 535亿
构建/键盘快捷方式/index.min.js 1.79千字节
build/keycodes/index.min.js 1.94千字节
构建/list-reasable-blocks/index.min.js 2.14千字节
构建/list-rusable-blocks/style-rtl.css 865亿
build/list-rusable-blocks/style.css 865亿
build/media-utils/index.min.js 2.99千字节
build/notes/index.min.js版本 977亿
build/plugins/index.min.js 1.95千字节
build/preferences-persistence/index.min.js 2.23千字节
build/preferences/index.min.js 1.35千字节
build/primitives/index.min.js 960亿
build/priority-queue/index.min.js 1.52千字节
build/private-apis/index.min.js 937亿
build/react-i18n/index.min.js 702亿
build/react-refresh-entry/index.min.js 8.44千字节
build/react-refresh-runtime/index.min.js 7.31千字节
build/redux例程/index.min.js 2.75千字节
构建/可重用块/index.min.js 2.26千字节
构建/可重用块/样式-rtl.css 265亿
构建/可重用块/样式.css 265亿
构建/rich-text/index.min.js 11千字节
build/server-side-render/index.min.js 2.09千字节
build/shortcode/index.min.js 1.52千字节
build/style-engine/index.min.js 1.53千字节
构建/token-list/index.min.js 650亿
build/url/index.min.js版本 3.74千字节
build/vendors/intert-polyfill.min.js 2.48千字节
build/vendors/react-dom.min.js 41.8千字节
build/vendors/react.min.js 4.02千字节
build/viewport/index.min.js 1.09千字节
build/warning/index.min.js 280亿
build/widgets/index.min.js 7.3千字节
构建/widgets/style-rtl.css 1.18千字节
build/widgets/style.css 1.18千字节
构建/wordcount/index.min.js 1.06千字节

压缩尺寸作用

@凯文940726 凯文940726 用力推动的这个 尝试/setup-node-composite-action 分支3次,最近一次 52e2887号 38797页 比较 2022年11月21日10:38
@凯文940726 凯文940726更改了标题尝试自定义设置-节点主动缓存的复合操作 加快npm-ci公司通过缓存节点_模块 2022年11月21日
.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/setup-node/action.yml 显示已解决 隐藏已解决
#由于复合动作中存在已知错误,因此有必要对字符串进行比较。
#请参见https://github.com/actions/runner/issues/1483#问题评论-1279933184
if:${{inputs.should-rebuild=='true'}}
运行:npm重建
复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

这通常是不需要的,因为大多数软件包都没有安装后脚本。然而,一些反应阳性相关的软件包确实需要它们,所以我们选择加入。

这不是未来的证明,因为我们可能会包括一个需要安装后未来。我们可以跑了npx can-i-ignore脚本手动检查这些情况。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我们能不跑吗npm-ci公司而不是npm-ci—忽略脚本?

我还想知道对性能的影响与--签名-我可以测量一下,然后找出答案。

这似乎对这种变化更具危险性:当某人的PR未能通过多个测试套件时,我们是否可以让他们更清楚地知道原因是他们需要提供应重新构建:true?

我不确定我会如何期望一个人从失败开始,然后回到这个环境。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

是的,正如我上面所说,它并不完全“安全”,但我认为它对大多数情况来说已经足够好了。无论何时OS/Node,我们都会使缓存失效/包装-锁.json变化,所以它或多或少像我们在当地发展期间的情况。

我还想知道对性能的影响与--签名

可能不多,因为npm-ci公司仅在没有缓存命中时运行。我们测量中的大多数运行都有缓存命中。

然而,npm重建确实会增加一些运行时间。我们在这里使用它来触发任何潜在的安装后被忽略的依赖项中的脚本-忽略脚本.使用测试can-i-ignore-脚本,大多数依赖项都具有安装后脚本是反应阳性-相关(和地方发展相关),因此,我认为在构建反应积极性时,将其作为一种选择是有意义的。

我们可以试着使用npm-ci公司没有--签名并且总是跑步npm重建尽管如此。我认为在大多数情况下,这是不必要的,可能会增加20到30秒的运行时间,但从技术上讲,这“更安全”。缓存节点_模块不会像跑步一样npm-ci公司每次我都觉得没关系。

我不确定我会如何期望一个人从失败开始,然后回到这个环境。

我希望它非常明显,因为它可能会让CI失败,我们可以对此进行调查。我认为只有当与安装后尽管如此,这应该是非常罕见的。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我们测量中的大多数运行都有缓存命中。

你在哪里测量的?比例是多少拉_请求PR中的事件?

可能会增加20到30秒的运行时间,但从技术上讲它“更安全”

做错事通常更快😉
我真的很担心引入一种非常微妙的行为,如果你还不知道它的存在,它可能会破坏事情,记住你需要在适当的时候应用一种变通方法。

它可能会使CI失败,我们可以对此进行调查

我同意,但你怎么会建议某人从“我的公关失败,我不知道为什么”到找到这面旗帜?

复制链接
成员

@dmsnell公司 dmsnell公司 2022年12月6日

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我认为在大多数情况下这是不必要的,可能会增加20到30秒的运行时间

我还没有调查原因,但如果我做得对,几秒钟后似乎不会有太大区别。到目前为止,收集的数据还不足以得出任何可测量影响的结论。我可能做错了什么,或者国旗可能没有产生我们预期的影响。

诚然,对于单元测试和端到端测试,仍然存在多模态分布的问题,这可能会影响统计数据。我还没有调查对结果的影响。

我的测试分支是#46318

单元测试工作流

分公司-45932-46318

性能测试工作流

分公司-45932-46318

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

你在哪里测量的?比例是多少拉_请求PR中的事件?

我直接查看了每次运行的细节,看看是否有缓存命中。我只调查了这家公关公司的业绩,因为这是我们衡量的地方。

做错事通常更快😉

这取决于你认为什么是“错误的”。我只是说,在我的研究中,这是我愿意接受的权衡。这显然是主观的,完全“正确”地去想别的。

但你怎么会建议某人从“我的公关失败,我不知道为什么”转向寻找这面旗帜?

我认为我们应该能够在代码审查中发现这一点。就像人们如何在不同的操作系统中工作而不是在CI中一样,事情会有所不同,CI中会发生奇怪的事情。如果需要,我们也可以写一些关于这方面的指南或日志。我同意我们应该尽可能减少破坏性的更改,但我相信这是很少会破坏的。但是,如果移除的附加时间--签名太小了,没关系,我会马上站在篱笆的另一边😝 .

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我删除了--签名npm重建在里面1949d5f年看起来还不错!

我更新了安装后步骤,以同时运行安装后包文件夹中的脚本。这在技术上与npm-ci公司虽然它只在包装文件夹,但不是针对所有依赖项递归。

如果安装后脚本只更新节点_模块文件夹(这是大多数依赖项正在做的),然后应该安全地缓存它。然而,在react本地编辑器,的i18n-缓存文件都是在中生成的节点_模块和在程序包/文件夹,因为链接。在测试期间i18n-缓存文件从包装文件夹,因此我们需要重新运行安装后脚本来再次填充它。我认为这可以被视为一种边缘情况,可能还有其他解决方法(例如从节点_模块作为备用)。

package.json包 过时的 显示已解决 隐藏已解决
@凯文940726
复制链接
成员 作者

@dmsnell公司打电话给你,好像你以前也做过类似的事情,可能对此感兴趣😉 .

@dmsnell公司
复制链接
成员

@凯文940726我可以监控此公关,并开始收集数据,了解其是否具有预期影响。

我们认为两分钟的时间值得增加缓存的复杂性和可预测的缓存失效问题吗?

我还没有看过其他工作流,但性能工作流中有很多性能改进,没有增加新的复杂性。

作为参考,在处理性能测试套件时,我试图收集分支中至少30个测试运行的数据以进行比较大旅行箱并确定这些改变是否值得;并不是所有我认为有帮助的事情都做到了。

@dmsnell公司
复制链接
成员

dmsnell公司 评论2022年11月25日

对性能测试工作流的影响

分公司-45932-44907

  • 此分支,64个样本,µ=21.02 min
  • 大旅行箱,26个样品,µ=23.76分钟
  • 数据强烈建议此分支对于性能测试套件更快,具有重要意义P=0.0001
  • 平均运行时间的减少量为2米44秒
原始评论 @凯文940726在大约30次性能测试之后,这里是一些初始数据;我开始对E2E测试进行排序并在那里进行比较

分公司-45932-44907

在30次跑步后,没有足够的证据来判断这是否有影响。我们看到的结果非常接近,如果我们反复运行这个实验,假设PR没有变化,并且我们没有缓存净现值法依赖关系,那么在大约一半的测试运行中,我们预计至少会看到与实际PR相同的加速。换句话说,在测试运行中没有观察到明确的加速。

从正态图上可以看出,数据看起来确实比在主干中运行的测试要正常一些。这表明可能有一个因素在起作用,即此更改可以减少一些长尾偏差,但如上所述,没有足够的证据从这项工作中得出任何结论。

图表显示,在大约30次测试运行中,平均测试运行几乎相同(测得的差异为5.3秒),在该分支中略短,而中位运行时间测得高于大旅行箱当然,这只是一个有趣的观察结果,因为同样,如果到目前为止有一个真正的影响,那么它与测试运行本身的随机变化是无法区分的。当我继续重新运行性能测试套件时,我会不断更新图表,如果我能得到一些E2E测试套件的数据,我也会发布。

@dmsnell公司
复制链接
成员

dmsnell公司 评论2022年11月25日

对端到端测试工作流的影响

分公司-45932-44907

  • 该分支,1868个样本,µ=15.57分钟
  • 大旅行箱,608个样品,µ=17.22分钟
  • 数据最终表明,对于端到端测试工作流,此分支更快
  • 平均运行时间的减少量为1米39秒

现在,我们正在将所有四个端到端测试合并为一个测试。这解释了偏离常态的原因。我会看看是否可以将这四个测试作业分开,因为它们是独立测试。我不认为这会使总体结果无效。

原始评论在E2E测试中,大约10次测试运行时,差异看起来更可能出现,平均测试运行时间减少了1分7秒

分公司-45932-44907

这个数据看起来有点可疑,这可能是我在使用我为E2E的性能工作流编写的脚本时疏忽了一些(它有四个E2E作业)。我会尽我所能更新课程。

@凯文940726
复制链接
成员 作者

@dmsnell公司感谢您的测试!我很好奇你是怎么测试的。这里有测试脚本的代码吗?

我认为您在性能测试中遗漏了一些重要的变量,我们必须考虑缓存。如果我们想将其与主干进行比较,我们需要确保它们具有相同的基线,运行缓存命中和缓存未命中,并比较结果。

此外,本次公关的主要动机是提高跑步成绩npm-ci公司与性能测试没有直接关系。将性能测试纳入等式中会使结果出现偏差,并且更难进行比较,尤其是当性能测试本身具有非常广泛的运行时间范围时。由于没有证据表明缓存节点_模块会降低测试的性能(我们可以对此进行单独测试以确保),我们只需进行比较npm-ci公司明确地。我认为这就是为什么E2E测试的指标提高了1分钟,而不太稳定的性能测试的结果却没有那么有价值。

@dmsnell公司
复制链接
成员

我认为你在性能测试中遗漏了一些重要的变量,

我相信我是!

我很好奇你是怎么测试的。

我正在做的是让GitHub在测试工作流完成后重新运行它们。我不会在本地进行测试,也不会以任何不同于任何典型公关经验的方式进行测试。也就是说,我正在测量的结果是查看GitHub的API报告的CI工作流的wall-clock运行时,该API提供了每次运行的结果。

如果我们想将其与主干进行比较,我们需要确保它们具有相同的基线,运行缓存命中和缓存未命中,并比较结果。

我不确定我是否同意这一点。我试图衡量的是对CI工作流运行时间的真正影响,如果我们声称缓存会有所帮助,那么我认为我们必须根据实际测试运行进行测试。

有理由认为,如果我们合并这一点,那么更多的PR将从缓存数据开始,但我认为我们仍有可能这种假设不成立,因为在我们的1700个分支机构中,有很多PR不会从最新的分支中分叉大旅行箱因此,合并基的多样性将使缓存失效,其方式与在此分支中运行测试与针对大旅行箱意志。

由于没有证据表明缓存node_modules会降低测试的性能(我们可以对此进行单独测试以确保),因此我们应该专门比较npm-ci。

在改进CI工作流方面,我研究了大量优化,这些优化看起来很有前景孤立地但在系统内部考虑时,效果并不相同。有些事情似乎不直观,这就是为什么我如此强调测量实际结果。

一种可能性是GitHub自己的净现值法当缓存在我们的测试容器中运行时,它的性能足够高,与处理缓存的速度一样快(或几乎一样快),或者在某些情况下,缓存可能会造成更大的危害。


我的脚本这很俗气,因为我是在探索问题的同时开发它的,而不是专注于构建可维护的代码。主要是轮询GitHub以运行CI工作流并解析数据;脚本中一些看起来不必要的内容是由于我报告的GitHub API响应中的错误导致的,他们正在努力修复(当为给定的工作流运行尝试请求作业时,他们只报告最近运行的作业的链接)。

我不小心停止了运行脚本,所以我会再次使用它。很高兴接受建议!

@凯文940726
复制链接
成员 作者

首先,我认为性能测试的比较在这种情况下没有意义。他们甚至没有在中继和PR中做同样的工作。在PR中,性能测试是运行“Compare performance with trunk”,而在trunk中,它是运行“比较性能with base branch”。比较它们不是一个简单的比较,我们至少应该控制变量,使它们尽可能接近。

然而,我认为我们不需要将全面的性能测试纳入我们的方程式。我们将工作分为多个步骤,以便单独调试它们。主干中的“使用所需版本的NodeJS”和“Npm安装”步骤负责设置Node.js和安装依赖项。在这个PR中,我们将它们替换为“安装节点和安装依赖项”。这是工作流中唯一的更改,其他都不重要。我们应该调整基准,只包括它们(以及它们的清理步骤,如果有的话)。

在我们的1700个分支中,有许多PR不会从最新的主干分叉,因此合并基的多样性将使缓存失效,就像在该分支中运行测试与针对主干运行测试一样。

是的!这是一个值得关注的问题,但这已经是当前CI中npm缓存的工作方式。此增强不会对每个PR都有好处,但在缓存命中时应该会有好处。最后,缓存就是这样工作的,不是吗😆?

值得注意的是,只有在以下情况下,我们才会重新验证缓存包装-锁.json已更改,因此PR不必基于最新的主干。这也遵循了官方NPM缓存工作原理的相同逻辑。

这里的一种可能性是,GitHub自己的npm缓存在我们的测试容器中运行时性能足够好,与处理缓存的速度一样快(或几乎一样快),或者在某些情况下,缓存可能会造成更多危害。

好吧,如果你看看GH Actions报告的安装时间,你会发现当节点_模块缓存,因此此假设无效。

可能存在缓存的情况节点_模块I/O运行时开销比已安装的长,但我对此深表怀疑🤔.

感谢您分享脚本!不过,我很难理解其中的一些上下文。哪个大旅行箱你在运行测试时使用了吗?你也在主干上重新运行相同的提交吗?或者您是在主干上执行最近30次提交吗。GH操作默认在“合并提交”上运行,因此我们应该将基本提交用作比较的“主干”。请注意,如果有新的提交推送到,则基础将更改大旅行箱与此同时。

@dmsnell公司
复制链接
成员

首先,我认为性能测试的比较在这种情况下没有意义。

也许有误解。我正在测量CI中“端到端测试”和“性能测试”工作流的运行时。我选择这些是因为它们是受此PR影响的两个工作流,所以我假设如果PR更改了它们,我们应该会受到影响。

我不是在将端到端测试与性能测试进行比较。

这是工作流中唯一的更改,其他任何更改都不重要。我们应该调整基准,只包括它们(以及它们的清理步骤,如果有的话)。

我仍然受到这一断言的挑战,因为目标似乎是“通过缓存node_modules来加快CI管道”。我的测量是查看当前两个工作流的CI管道运行时,即端到端测试(耗时最长)和性能测试(过去耗时最久)。我们可以开始测量任何或所有工作流,以了解这对一切的影响,但性能测试很方便,因为我在过去一个月左右一直在监视这些测试,而端到端测试似乎很相关,因为整个流程中的任何加速都必须加快这些测试,否则,任何人都不会感觉到这些改进(因为他们仍在等待最慢的工作流完成)。

所以我不想限制我们自己,当一个片段被放置在一个更复杂的系统中,而这个系统的效果可能不同时,我只想孤立地观察一个片段。

可以看到,当缓存nodemodules时,时间会显著缩短,因此这个假设是无效的。

这对于E2E测试来说似乎是准确的,但对于性能测试来说却不准确。

这种增强不会对每个PR都有好处,但在缓存命中时应该会有好处。

理论上这是完全正确的,考虑到我们只是坐在这里告诉GitHub在CI测试完成后立即重新运行,我们应该预期缓存命中的最佳案例当测试这种PR的影响时。如果理论是正确的,那么从测量中应该可以清楚地看出,这实现了它的目标。

在每个工作流中安装所有包仍然需要大约2分钟。通过缓存node_modules,我们可以显著减少75%的安装时间。

根据我70次测试的最新数据,它看起来相当有说服力端到端测试速度更快,平均运行时间的测量差异为1m37s。在大约30个性能测试运行之后,这还不是决定性的,但它希望以这种方式证明这一点在性能测试中速度较慢当前测得的平均CI工作流运行时增加47秒的速度减慢。

我刚刚开始重新运行Playwright工作流(上次完成需要26分钟)和JS Unit Tests工作流(上次结束需要4分钟)。看看这对这些工作流有什么影响将很有趣。

但我对此深表怀疑🤔.

这就是说,考虑到我在优化性能测试工作流程时发现了多少错误假设,我希望我们能够有一个可信的理由来声称,相对于从观点、猜测或怀疑中争论,我们所做的更改值得额外的复杂性😄

很明显,这将减少E2E工作流的一些时间,但可能会增加性能测试的时间。当收到更多数据时,我们可以更好地描述“我想要这个权衡”或“我不想要这个权衡。”

运行测试时您使用的是哪个主干?你也在主干上重新运行相同的提交吗?

我在用#44907作为比较的基础。两周后了大旅行箱,但我会更新它。在进行性能测试时,我意识到了merge-branch元素,但发现实际上,如果出现一点延迟,也没有多大关系,因为大多数上游提交都不会对测试产生重大影响。我们会发现,因为我可以很容易地过滤,只使用更新后的数据大旅行箱.

@dmsnell公司
复制链接
成员

@凯文940726似乎许多工作流都由于犬科动物问题。我不确定分支是否只需要重新设置基址,但我希望这不是缓存的问题npm-ci公司期间由于非确定性而失败npm-ci公司

@凯文940726
复制链接
成员 作者

也许有误解。

啊,当然。我以为你在用大旅行箱的工作流与公关的工作流不同。实际上,您正在使用#44907作为“主干”的基线。

我仍然受到这种说法的挑战

这很公平!我的观点是,可以孤立地查看此PR中的增强,而单是性能测试带来的许多改进无法轻易剥离。我认为这个PR仍然可以改进性能测试运行时间,只是我们还没有足够的数据来证明这一点。性能测试的运行时间变化很大,由于随机因素,以前的运行可能表现不佳。如果我们有更多的样品,我们可能会得到不同的结果。这只是我的猜测,因为结果对我来说是反直觉的,我现在没有任何解释。

我希望我们能够有一个可信的理由来声称,相对于从观点、猜测或怀疑中争论,我们正在做出的改变值得额外的复杂性😄

这也很公平!但我认为,我们不应该在创建基准之后就停下来,我们应该设法弄清楚那里发生了什么。基准测试只是一个帮助验证某些东西是否有效的工具。如果它产生了意外的结果,那么我们就有机会在代码(TN)或基准本身(FN)中调试它。

当收到更多数据时,我们可以更好地描述“我想要这个权衡”或“我不想要这个权衡。”

当然!我也很好奇,可能会花一些时间自己创建一个基准。我会分享更多信息。

似乎许多工作流都由于caniuse问题而失败。我不确定分支是否只需要重新设置基址,但我希望这不是因为在npmci期间由于非确定性而导致缓存npmci失败的问题

是的,这是一个非常有趣的观察结果!我会调查的!谢谢!🙇

@凯文940726
复制链接
成员 作者

似乎许多工作流都由于犬科动物问题。我不确定该分支是否需要重新设置基址

哦,看来我们只需要在#46093!

@dmsnell公司
复制链接
成员

对单元测试工作流的影响

分公司-45932-44907

  • 此分支,1061个样本,µ=5.18 min
  • 主干,871个样品,µ=6.81分钟
  • 数据最终表明,对于单元测试套件来说,这个分支更快
  • 平均运行时间的减少量为1米38秒

@dmsnell公司
复制链接
成员

@凯文940726不知道为什么在重新设定基之后事情发生了变化,但现在我一直在测量的所有三个测试都报告了该分支的改进。

我想尝试将其与没有--签名。那面旗帜似乎至少有点可疑,现在我想知道它是否与犬科动物错误。可能加速的部分原因是缓存,部分原因是我们跳过了以前依赖的步骤。

出于好奇,是什么让你把国旗添加到npm-ci公司?

@凯文940726 凯文940726 用力推动的这个 尝试/setup-node-composite-action 分支2次,最近一次 英国广播公司38b16 1949d5f年 比较 2022年12月7日10:38
@dmsnell公司
复制链接
成员

@凯文940726我认为对此可以做的最好的事情之一就是在部署后对其进行监控,以衡量它是否具有预期的影响。我预计一旦出现这种情况,缓存的影响就会降低大旅行箱我们发现依赖关系有多个版本,而这个分支的依赖关系基本上保持不变。

我不知道它会下降多少,我也不知道在合并之前有什么好的测试方法。更重要的问题是,为了平衡增加的维护成本、缓存失败时的额外调试成本,以及当有人试图理解为什么有些东西不正确时引起的沮丧,我们希望它降低多少。

看起来最近的一些反应性测试完成的时间类似于E2E套件。这是一个好消息,因为只要这些程序的运行时间超过30-40分钟,这个缓存为所有其他套件带来的好处就会被锁定,但如果最长的工作流现在需要20分钟,那么大约1分钟半的估计速度就可以转化为大约8%的速度,这是非常好的。

我们可能可以通过迭代所有工作流都已完成的开放PR来进行测试,并查看完成时间最长的PR。事实上,我们甚至可以从检查运行或检查API端点来自Github。即使在我专心研究了一段时间之后,我仍然不清楚这个术语。我想,只要是在周中,我们就应该在一两天内对数据进行合理猜测。实验长度的决定因素可能是频率任何PR涉及节点模块或版本的更改,因为这是PR中所有值所依赖的。我还认为旧数据会保留一个月左右?因此,我们可能被限制为最长两周的实验期,并且在部署后立即开始,因为在此之后,我们开始丢失来自之前次。

在某种程度上,这带来的好处将不值得开发成本,无论是在检查套件运行时持续时间的原始减少还是其中的一部分。我很想知道你的目标是什么,以及你认为该折衷点的合理阈值应该是什么。

@凯文940726
复制链接
成员 作者

我预计一旦出现这种情况,缓存的影响就会降低大旅行箱我们发现依赖关系有多个版本,而这个分支的依赖关系基本上保持不变。

我们很少更改依赖项,至少与我们运行的工作流数量相比是这样的。我对trunk上的运行进行了快速搜索,在642次运行(将受此PR影响的工作流)中,只有10次更改了包装-锁.json文件。我甚至没有计算给定运行中的多个作业(aend2end测试例如,run可以有6个作业)。这大约是缓存命中率的98%。这只是在主干上,如果我们也计算PR,我预计数字会更大。

更重要的问题是,我们希望它降低多少,以平衡增加的维护成本、缓存失败时的额外调试成本,以及当有人试图理解为什么有些事情不对劲时所引起的挫败感。

维护费用是多少?如果缓存未命中常规贡献者,则无需调试,只需恢复到现在的状态:重新安装所有内容。

在某种程度上,这带来的好处将不值得开发成本,无论是在检查套件运行时持续时间的原始减少还是其中的一部分。我很想知道你的目标是什么,以及你认为该折衷点的合理阈值应该是什么。

目标很简单:减少在CI上花费的时间,这只是第一步。我仍然无法理解为什么你认为这不值得。如果缓存命中率达到99%,那么大约需要90到120秒的改进。如果缓存未命中,那么什么都没有改变,它只会做我们现在正在做的事情。

本次公关中收集的所有数据都显示出积极的结果。除非你有具体的理由反对,否则我建议我们试一试大旅行箱来测试它。如果它的行为与我们想的不一样,我们可以随时恢复🙂 . WDYT?

@dmsnell公司
复制链接
成员

维护费用是多少?

成本是理解和修改运行脚本。

如果缓存未命中,则无需调试

这里有两个成本:

  • 如果缓存突然无法命中,则需要有人找出原因
  • 更大的问题是缓存在不应该命中的情况下命中

为什么你认为这不值得

这绝对是我说的话或意思。我所说的意思是,在所有优化中都有一个点,即通过增加复杂性来平衡收益和成本。我不是说这不值得,而是我们衡量影响利用这些知识来确认它做了我们想要的事情,如果没有,这是一条线索,我们可以将其还原。

为什么我总是提起这个?我只是个混蛋吗?🙃
不,因为我发现了多起案件补充为了加快速度,在测量时,它要么没有加快速度,要么实际上减缓了速度。这一切都是本着诚意完成的,但由于影响没有得到衡量,我们被留给了更复杂的代码,没有人意识到这一点。

所以这个问题很好,因为如果你说“90年代是成功的”,而我们衡量的是120年代,那么你就知道你的工作产生了积极的影响。如果我们测量10s,我们会怎么做?或者,如果出于某种奇怪的原因无意中让事情变慢了,我们怎么知道呢?

我建议我们在后备箱上试试看

我的最后一句话就是这样开始的,所以我们意见一致😄
我不认为有一种实用的方法可以在合并之前衡量这一点的全部影响,或者衡量任何涉及平台级缓存的影响。

复制链接
成员

@dmsnell公司 dmsnell公司 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

这仍然被标记为草稿,但它已经准备好合并了。

最好还是为此设置一个目标性能影响,以便在合并后我们可以测量并查看它是否达到了我们预期的效果。

@凯文940726 凯文940726将此拉入请求标记为已准备好进行审阅 2023年2月14日07:39
@凯文940726
复制链接
成员 作者

谢谢你@dmsnell公司!

最好还是为此设置一个目标性能影响,以便在合并后我们可以测量并查看它是否达到了我们预期的效果。

我预计,如果缓存命中,受此PR影响的所有工作流都将获得1米30到2米的性能提升。让我们看看是不是这样!

是的,我忘了把这个标记出来供审查😅. 不过,我会等其他人一有时间就插话!

@凯文940726
复制链接
成员 作者

请注意,“向GitHub报告”工作流当前失败,因为它依赖于上的工作流大旅行箱,它还没有这个复合动作。一旦合并,这个问题就会消失。

复制链接
贡献者

@德斯罗什 德斯罗什 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

这看起来很棒!感谢您为此所做的工作。我一直想看看核心回购的情况,因为有几个人提到他们仍在缓存他们的节点_模块目录,它确实大大提高了相关命令的速度。

关于缓存,我认为可以详细介绍一下。每个存储库允许10GB的总缓存存储。一旦超过该存储空间,GHA就会逐出缓存,直到总存储空间低于限制。当我昨天查看时,Gutenberg存储库的容量约为25GB,GHA没有自行清理。但看看今天,我们的容量是8.67GB。最旧的缓存上次使用是在12小时前。

我认为,我们确实需要花一些时间全面检查缓存键实践,看看我们是否正在跨不同工作流为同一事物创建多个缓存条目。我确实认为避免任何重复将有助于我们在整个工作流中保持一致,并可能有助于实现这一点。

我提出了一些建议,并提出了一些问题。这些问题解决后,我想再看一眼!

.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/setup-node/action.yml 显示已解决 隐藏已解决
使用:操作/缓存@v3
具有:
路径:“**/node_modules”
key:node_modules-${{runner.os}}-${{steps.node-npm-version.outputs.node_version}}/${steps.node-npm-version.outputs.npm_version{}-$}{hashFiles('package-lock.json')}}
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我想我们不需要在这里的缓存键中包含npm版本。

我无法想象npm的版本会独立于Node.js版本而改变的场景。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

自从我们净现值法版本仍处于关闭状态<7?

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我认为我们不需要包括净现值法这里也有版本。包括它可能会更频繁地破坏缓存。

自从我们净现值法版本仍位于<7?

这是因为我们使用的是Node 14,默认情况下它带有npm v6。npm版本可以独立于Node.js进行更改,但它们应该只是次要版本,并且向后兼容。

复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

当Node.js的新版本发布时,特定版本的npm会与该版本捆绑在一起。你会发现这里有全包舱单.只要屁股npm安装-g npm命令未运行,则最初与该Node.js版本捆绑的版本将是安装的版本。

我查看了操作代码/setup-node。虽然我无法百分之百地确认这一点,但新版本似乎是通过actions/node-versions和actions/versions-package-tools使用此清单在Action runners中提取和构建的。

因为我们只安装Node14.x,所以npm的版本总是< 7,但npm的特定版本6.倍已安装的将绑定到已安装的节点的特定版本。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

是的,但根据项目的package.json包我们很好使用的文件节点@最新我认为大多数人最终都会在当地做这件事。

古腾堡/package.json

第17至20行在里面6434e0亿

“发动机”: {
“节点”:">=14.0.0",
“npm”:">=6.9.0 <7"
},

所以也许偶然我们只使用了节点@14在测试套件中,但即便如此,我们是否可以保证运行14的特定版本?还是我们把它完全固定在一个特定的版本上?

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

所以也许偶然我们只使用了节点@14在测试套件中

.nvmrc文件在CI.FWIW上将Node.js版本固定为14,目前正在进行公关(#48950)希望很快能合并,将Node.js和npm升级到CI上的最新版本。

但即便如此,我们是否可以保证运行14的特定版本

不,如果有一个次要/补丁版本,我们将在CI上自动使用更新的版本(基本上^14). 但这没关系,因为我们在缓存密钥中包含了完整节点版本。

请注意,此PR不会影响任何人的本地设置,他们可以继续使用本地支持的Node.js/npm版本。而且缓存只存在于CI上,因此它们也不会受到它的影响。此PR仅缓存节点_模块在CI上,这是一个受控的环境。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

如果有次要/补丁版本,我们将自动使用CI上的更新版本(基本上是^14)。但这没关系,因为我们在缓存密钥中包含了完整节点版本。

我认为我们在这一点上是一致的。我的评论是专门评论我们期望更改为节点发生不匹配的情况净现值法。我们有意不使用的捆绑版本净现值法在项目中,但我们使用更改版本的节点很多时候,因为我们节点>=主要版本。

.github/setup-node/action.yml 显示已解决 隐藏已解决
.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/setup-node/action.yml 过时的 显示已解决 隐藏已解决
.github/workflows/unit-test.yml 显示已解决 隐藏已解决
@凯文940726
复制链接
成员 作者

@德斯罗什谢谢你的评论!我处理了反馈🙇‍♂️

当我昨天查看时,Gutenberg存储库的容量约为25GB,GHA没有自行清理。但看看今天,我们的容量是8.67GB。最旧的缓存上次使用是在12小时前。

是的,公关描述中也提到了缓存限制的权衡。请注意,虽然我们仍在试验此PR,但将有两个单独的缓存。当我们处于对包装-锁.json文件。我认为从长远来看,这不会是一个问题,尽管我们仍然应该监视它可能带来的缓存效果。

@凯文940726 凯文940726 用力推动的这个 尝试/setup-node-composite-action 分支2次,最近一次 2立方厘米3 7446f9页 比较 2023年3月13日09:06
@凯文940726 凯文940726 用力推动的这个 尝试/setup-node-composite-action 分支 7446f9页 1c9ca27 比较 2023年3月13日09:24
复制链接
贡献者

@德斯罗什 德斯罗什 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

看起来不错!下面是重新查看时弹出的一些其他内容。

.github/setup-node/action.yml 显示已解决 隐藏已解决
如果:${{steps.cache-node_modules.outputs.cache-hit==“true”}}
运行:|
npm运行后安装
npx lerna运行后安装
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

跑步的区别是什么安装后对于净现值npx勒纳? 我们两者都需要吗?

如果是这样,我想知道我们是否应该分为两个步骤。这将使两个失败案例中的哪一个遇到问题变得更加清楚。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我添加了一些注释来解释这一点❤️ .

我认为我们不需要把它分成两个步骤,因为他们有相同的目标。

.github/workflows/build-plugin-zip.yml 过时的 显示已解决 隐藏已解决
@@-20,20+20,17@@作业:
战略:
fail-fast:错误
矩阵:
节点:[14]
节点:['14']
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

很奇怪为什么需要这样做。这是否会导致复合工作流中的失败,因为类型定义为一串?

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我认为两者都有效,但其他地方都使用字符串。只是想保持它的一致性。

.github/workflows/publish-npm-packages.yml 过时的 显示已解决 隐藏已解决
.github/workflows/pullrequest-automation.yml 显示已解决 隐藏已解决

-名称:Npm安装和建造
-名称:Npm build
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

嗯,这似乎是在运行Lerna构建脚本。

建议的更改
-名称:Npm版本
-名称:构建Lerna

复制链接
成员 作者

@凯文940726 凯文940726 2023年3月14日

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

不过,“Build Lerna”也不是真正描述性的。我认为这应该是“构建包”,然后运行npm运行构建:包。但它已经是后备箱中的样式了,所以也许我们应该在另一个PR中更改它?

.github/workflows/unit-test.yml 显示已解决 隐藏已解决
运行:|
npm-ci公司
npm运行生成
-名称:Npm build
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我们在跑步npm运行生成,但它不仅仅是一个npm构建。也许“运行构建脚本”会更通用、更准确。如果我们改变了这一点,它应该到处都改变。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

是的,让我们在另一个公共关系中这样做。

复制链接
贡献者

@德斯罗什 德斯罗什 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

谢谢@凯文940726我可以合并这个来尝试一下!

@凯文940726
复制链接
成员 作者

谢谢!让我们试试看,如果有什么问题就恢复😅 !

@凯文940726 凯文940726合并提交立方厘米11957进入之内 大旅行箱 2023年3月16日
@凯文940726 凯文940726删除了 尝试/setup-node-composite-action 分支 2023年3月16日02:49
@github-操作 github-操作 机器人程序将此添加到古腾堡15.5里程碑2023年3月16日
@德斯罗什
复制链接
贡献者

@凯文940726我知道这才大约4天,但我想回过头来看看你是否观察到了这种变化的任何影响,无论是积极的还是消极的。

@德斯罗什
复制链接
贡献者

我注意到一件有点烦人的事情是,当两者都节点-版本节点-版本文件存在。

屏幕截图2023-03-20,13 39 12

@凯文940726
复制链接
成员 作者

当然!我对“单元测试”在主干上提交之前和之后的工作流。

我每次跑了30次,结果如下:

之前:

平均值:10米18秒
中位数:10米21秒
标准偏差:42s

之后:

平均值:8m 51s
中位数:8米29秒
标准偏差:1m 17s

对其他工作流进行更多分析也很有意思,但我没有时间😅 .

我注意到一件有点烦人的事情是,当两者都节点-版本节点-版本文件存在。

是的,事实证明我们确实想要如果最后的声明😅 .

奥卡姆推送提交到ockham/gutenberg引用的这个拉请求 2023年3月22日
*尝试自定义setup-node复合操作以实现主动缓存*添加关于GHA错误的评论*尝试不重建和忽略脚本*将npm版本包含到缓存密钥中*尝试还原gratful-fs的更改*更新步骤名称*代码审查*添加一些评论
奥卡姆推送提交前往奥克姆/古滕贝格引用的这个拉请求 2023年3月22日
*尝试自定义setup-node复合操作以实现主动缓存*添加关于GHA错误的评论*尝试不重建和忽略脚本*将npm版本包含到缓存密钥中*尝试还原gratful-fs的更改*更新步骤名称*代码审查*添加一些评论
免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
GitHub操作 更新GitHub操作代码的Pull请求
项目
还没有
开发

成功合并此请求可能会解决这些问题。

3名参与者