Skip to content

Version Packages

Version Packages #1415

Workflow file for this run

name: E2E Watch
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- 'packages/weapp-tailwindcss/**'
- 'e2e/**'
- 'tools/weapp-tailwindcss-scripts/**'
- 'demo/**'
- 'website/docs/tailwindcss/v5-*.mdx'
- 'scripts/**'
- '.github/scripts/**'
- package.json
- pnpm-lock.yaml
- pnpm-workspace.yaml
- .github/workflows/e2e-watch.yml
- '!website/**'
- '!**/*.md'
- '!.changeset/**'
workflow_dispatch:
inputs:
run_pr_quick_gate:
description: Run the pull request quick gate matrix instead of the nightly matrix
required: false
type: boolean
default: false
schedule:
- cron: '0 18 * * *'
concurrency:
group: e2e-watch-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
pr-quick-gate:
name: e2e-watch-pr (${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.watch_case }}-${{ matrix.round_profile }})
if: (github.event_name == 'pull_request' && github.event.pull_request.draft == false) || (github.event_name == 'workflow_dispatch' && inputs.run_pr_quick_gate == true)
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
watch_web_only: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: demo-core
round_profile: main-style
watch_save_snapshots: '1'
# macOS 已有 Linux 全量轮次兜底,PR 仅验证三个核心 bundler 的主样式热更新,避免 Mpx 全量轮次耗尽 runner 内存。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
# Taro 小程序继续按主包与分包拆分;Vite 使用 native watch,Webpack 保留 polling build。
# Vite 本地完整主包回归约 3 分钟,CI 命令保留 10 分钟预算。
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
# macOS hosted runner 的分包 corpus 会同时回放多个样式入口;保留独立预算,避免放宽主包与其他平台。
watch_max_plugin_process_ms: '12000'
watch_command_timeout_ms: '600000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1200000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1200000'
- os: macos-latest
runner_label: macos
watch_case: demo-uni
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 20
watch_timeout_ms: '280000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 20
watch_timeout_ms: '280000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 20
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 20
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: ubuntu-latest
runner_label: linux
watch_case: demo-core
# weapp-vite 的 fallback build 会额外启动构建进程;Linux 全量轮次的进程树 RSS
# 不稳定且远高于功能验证所需范围。主样式轮次保留核心 HMR 覆盖,并与 macOS 对齐。
round_profile: main-style
watch_save_snapshots: '1'
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-react-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-react-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1200000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '60000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '600000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: mini-program-main
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: main-package
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: mini-program-subpackages
watch_save_snapshots: '1'
watch_mini_program_only: '1'
watch_mini_program_scope: subpackages
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
taro_dev_ready_timeout_ms: '900000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1200000'
- os: ubuntu-latest
runner_label: linux
watch_case: demo-uni
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-react-tailwindcss-v4:alipay
artifact_case: taro-vite-react-tailwindcss-v4-alipay
round_profile: main-style
watch_save_snapshots: '1'
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-react-tailwindcss-v4:tt
artifact_case: taro-vite-react-tailwindcss-v4-tt
round_profile: main-style
watch_save_snapshots: '1'
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-vue3-tailwindcss-v4:alipay
artifact_case: taro-vite-vue3-tailwindcss-v4-alipay
round_profile: main-style
watch_save_snapshots: '1'
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: taro-vite-vue3-tailwindcss-v4:tt
artifact_case: taro-vite-vue3-tailwindcss-v4-tt
round_profile: main-style
watch_save_snapshots: '1'
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4:mp-weixin
artifact_case: uni-app-vite-tailwindcss-v4-mp-weixin
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: uni-app-vite-tailwindcss-v4:mp-weixin
artifact_case: uni-app-vite-tailwindcss-v4-mp-weixin
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: uni-app-vite-tailwindcss-v4:mp-alipay
artifact_case: uni-app-vite-tailwindcss-v4-mp-alipay
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: uni-app-vite-tailwindcss-v4:mp-qq
artifact_case: uni-app-vite-tailwindcss-v4-mp-qq
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: ubuntu-latest
runner_label: linux
watch_case: uni-app-vite-tailwindcss-v4:mp-toutiao
artifact_case: uni-app-vite-tailwindcss-v4-mp-toutiao
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: gulp-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: weapp-vite-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: mpx-tailwindcss-v4
round_profile: main-style
watch_save_snapshots: '1'
# Windows Mpx 单次全量编译可超过两分钟;PR 只保留主样式 add/rollback,完整轮次由 Linux 与 nightly 覆盖。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-react-tailwindcss-v4
round_profile: main-style
watch_save_snapshots: '1'
# Windows PR 只跑主包与两个分包的真实主样式 HMR;完整多轮由 Linux/macOS 与 nightly 覆盖。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-react-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
# Web HMR 独立运行,避免小程序长轮次失败后从头重跑并耗尽 job 预算。
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 25
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1200000'
- os: windows-latest
runner_label: windows
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: main-style
watch_save_snapshots: '1'
# Webpack 轮询重建在 Windows 上单轮接近一分钟,PR 只保留主包与两个分包的主样式契约。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
# Windows Webpack React 的独立分包回滚峰值接近 19s,保留慢机抖动余量。
watch_max_plugin_process_ms: '24000'
taro_dev_ready_timeout_ms: '900000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
# Webpack H5 独立验证浏览器 HMR,避免和 20 余次小程序重建串行。
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 25
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1200000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: main-style
watch_save_snapshots: '1'
# Windows PR 只跑主包与两个分包的真实主样式 HMR;完整多轮由 Linux/macOS 矩阵覆盖。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
# Web HMR 独立运行,避免小程序长轮次失败后从头重跑并耗尽 job 预算。
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 25
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1200000'
- os: windows-latest
runner_label: windows
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: main-style
watch_save_snapshots: '1'
# 一次默认轮次会串行触发 20 余次完整 Webpack 重建;PR 改为主包与两个分包的主样式门禁。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '18000'
taro_dev_ready_timeout_ms: '900000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-webpack-vue3-tailwindcss-v4
round_profile: web-only
watch_save_snapshots: '1'
# Vue3 Web HMR 单独运行,避免小程序轮次失败后连同 H5 从头重跑。
watch_web_only: '1'
watch_max_attempts: '1'
timeout_minutes: 25
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1200000'
- os: windows-latest
runner_label: windows
watch_case: demo-uni
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-react-tailwindcss-v4:alipay
artifact_case: taro-vite-react-tailwindcss-v4-alipay
round_profile: main-style
watch_save_snapshots: '1'
# Windows Alipay 的全量 template/script/多分包轮次会超过 PR job 预算;PR 保留真实主样式 add/rollback,nightly 继续跑全量。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
# Windows Alipay 轮询构建会为每次变更启动完整构建,冷态 CSS 处理需要独立预算。
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-react-tailwindcss-v4:tt
artifact_case: taro-vite-react-tailwindcss-v4-tt
round_profile: main-style
watch_save_snapshots: '1'
# Windows TT 完整多轮已在 Linux/macOS 覆盖;PR 保留主包与两个分包的主样式 HMR。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-vue3-tailwindcss-v4:alipay
artifact_case: taro-vite-vue3-tailwindcss-v4-alipay
round_profile: main-style
watch_save_snapshots: '1'
# 与 React Alipay 保持同一 PR 最小门禁,完整平台轮次由 nightly 覆盖。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '0'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
# Windows Alipay 轮询构建会为每次变更启动完整构建,冷态 CSS 处理需要独立预算。
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-vue3-tailwindcss-v4:tt
artifact_case: taro-vite-vue3-tailwindcss-v4-tt
round_profile: main-style
watch_save_snapshots: '1'
# Windows TT 完整多轮已在 Linux/macOS 覆盖;PR 保留主包与两个分包的主样式 HMR。
watch_main_style_only: '1'
watch_main_style_subpackage_limit: '2'
watch_max_attempts: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '18000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4:mp-weixin
artifact_case: uni-app-vite-tailwindcss-v4-mp-weixin
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4:mp-alipay
artifact_case: uni-app-vite-tailwindcss-v4-mp-alipay
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4:mp-qq
artifact_case: uni-app-vite-tailwindcss-v4-mp-qq
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4:mp-toutiao
artifact_case: uni-app-vite-tailwindcss-v4-mp-toutiao
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 30
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
runs-on: ${{ matrix.os }}
timeout-minutes: ${{ matrix.timeout_minutes }}
steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ matrix['node-version'] || 22 }}
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Playwright Chromium
shell: bash
run: |
for attempt in 1 2 3 4; do
if pnpm --filter @weapp-tailwindcss/scripts exec playwright install chromium; then
exit 0
fi
echo "Playwright Chromium install failed, retrying (${attempt}/4)"
sleep $((attempt * 10))
done
pnpm --filter @weapp-tailwindcss/scripts exec playwright install chromium
- name: Build watch suite package dependencies
run: pnpm --filter weapp-tailwindcss... --filter "./packages-runtime/*" run build
- name: Prepare benchmark output directory
shell: bash
run: |
rm -f e2e/benchmark/e2e-watch-hmr/*.json
rm -rf e2e/benchmark/e2e-watch-hmr/snapshots
rm -rf e2e/benchmark/e2e-watch-hmr/failures
mkdir -p e2e/benchmark/e2e-watch-hmr/snapshots
mkdir -p e2e/benchmark/e2e-watch-hmr/failures
- name: Run e2e watch suite (PR quick gate)
env:
E2E_WATCH_CASE: ${{ matrix.watch_case }}
E2E_WATCH_TIMEOUT_MS: ${{ matrix.watch_timeout_ms }}
E2E_TARO_DEV_READY_TIMEOUT_MS: ${{ matrix.taro_dev_ready_timeout_ms || matrix.watch_timeout_ms }}
E2E_WATCH_POLL_MS: ${{ matrix.watch_poll_ms }}
E2E_WATCH_MAX_HOT_UPDATE_MS: ${{ matrix.watch_max_hot_update_ms || matrix.watch_timeout_ms }}
E2E_WATCH_MAX_PLUGIN_PROCESS_MS: ${{ matrix.watch_max_plugin_process_ms || '6000' }}
E2E_WATCH_MAX_MEMORY_RSS_MB: ${{ matrix.watch_max_memory_rss_mb || '5632' }}
E2E_WATCH_MAX_MEMORY_RSS_DELTA_MB: ${{ matrix.watch_max_memory_rss_delta_mb || '4608' }}
E2E_WATCH_MAX_MEMORY_HEAP_USED_MB: ${{ matrix.watch_max_memory_heap_used_mb || '4096' }}
E2E_WATCH_COMMAND_TIMEOUT_MS: ${{ matrix.watch_command_timeout_ms }}
E2E_WATCH_MAX_ATTEMPTS: ${{ matrix.watch_max_attempts || '2' }}
# GitHub-hosted runner 的单次性能尖峰需要在全新 watch session 中复现,语义错误与超时仍立即失败。
E2E_WATCH_CONFIRM_PERFORMANCE_BUDGET: '1'
E2E_WATCH_ROUND_PROFILE: ${{ matrix.round_profile }}
E2E_WATCH_WEB_ONLY: ${{ matrix.watch_web_only || '0' }}
E2E_WATCH_MINI_PROGRAM_ONLY: ${{ matrix.watch_mini_program_only || '0' }}
E2E_WATCH_MINI_PROGRAM_SCOPE: ${{ matrix.watch_mini_program_scope || '' }}
E2E_WATCH_MAIN_STYLE_ONLY: ${{ matrix.watch_main_style_only || '0' }}
E2E_WATCH_MAIN_STYLE_SUBPACKAGE_LIMIT: ${{ matrix.watch_main_style_subpackage_limit || '' }}
E2E_WATCH_SAVE_SNAPSHOTS: ${{ matrix.watch_save_snapshots }}
WEAPP_TW_HMR_MEMORY_DEBUG: '1'
NODE_OPTIONS: --max-old-space-size=6144
run: pnpm e2e:watch
- name: Generate failure diff summary
if: failure()
shell: bash
run: node .github/scripts/e2e-watch-report.cjs diff-summary
- name: Generate root cause attribution report
if: failure()
shell: bash
env:
WATCH_CASE: ${{ matrix.watch_case }}
run: node .github/scripts/e2e-watch-report.cjs root-cause-report
- name: Publish job summary
if: always()
shell: bash
run: node .github/scripts/e2e-watch-report.cjs job-summary
env:
SUMMARY_TITLE: e2e-watch PR quick gate
WATCH_CASE: ${{ matrix.watch_case }}
ROUND_PROFILE: ${{ matrix.round_profile }}
- name: Upload e2e watch reports (always)
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-watch-hmr-pr-${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.artifact_case || matrix.watch_case }}-${{ matrix.round_profile }}-${{ github.run_id }}
path: |
e2e/benchmark/e2e-watch-hmr/*.json
e2e/benchmark/e2e-watch-hmr/hmr-speed-report.md
e2e/benchmark/e2e-watch-hmr/hmr-memory-report.md
if-no-files-found: ignore
retention-days: 14
- name: Upload e2e watch failure artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-watch-hmr-pr-failure-${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.artifact_case || matrix.watch_case }}-${{ matrix.round_profile }}-${{ github.run_id }}
path: |
e2e/benchmark/e2e-watch-hmr/snapshots/**
e2e/benchmark/e2e-watch-hmr/failures/**
if-no-files-found: ignore
retention-days: 14
root-style-import-shell-hmr:
name: root-style-shell-hmr (${{ matrix.project }})
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.draft == false)
strategy:
fail-fast: false
matrix:
project:
- uni-app-vite-tailwindcss-v4
- subpackage-uni-app-vite-tailwindcss-v4
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build watch suite package dependencies
run: pnpm --filter weapp-tailwindcss... --filter "./packages-runtime/*" run build
- name: Run root style import shell HMR regression
env:
E2E_ROOT_STYLE_SHELL_CASE: ${{ matrix.project }}
NODE_OPTIONS: --max-old-space-size=4096
run: pnpm e2e:root-style-shell-hmr
uni-app-css-post-hmr:
name: uni-app-css-post-hmr (issue-uview-plus-cssentries)
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.draft == false)
runs-on: windows-latest
timeout-minutes: 30
steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build watch suite package dependencies
run: pnpm --filter weapp-tailwindcss... --filter "./packages-runtime/*" run build
- name: Run uni-app scoped CSS post HMR regression
env:
NODE_OPTIONS: --max-old-space-size=4096
run: pnpm e2e:uni-app-css-post-hmr
nightly-full-regression:
name: e2e-watch-nightly (${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.watch_case }}-${{ matrix.round_profile }})
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.run_pr_quick_gate != true)
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: weapp-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 40
watch_timeout_ms: '280000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '6000'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-react-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
watch_web_only: '1'
timeout_minutes: 40
watch_timeout_ms: '280000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
watch_web_only: '1'
timeout_minutes: 40
watch_timeout_ms: '280000'
watch_poll_ms: '40'
watch_command_timeout_ms: '720000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
watch_web_only: '1'
timeout_minutes: 35
watch_timeout_ms: '240000'
watch_poll_ms: '40'
watch_command_timeout_ms: '600000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4:weapp
artifact_case: taro-vite-react-tailwindcss-v4-weapp
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4:alipay
artifact_case: taro-vite-react-tailwindcss-v4-alipay
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-react-tailwindcss-v4:tt
artifact_case: taro-vite-react-tailwindcss-v4-tt
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4:weapp
artifact_case: taro-vite-vue3-tailwindcss-v4-weapp
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4:alipay
artifact_case: taro-vite-vue3-tailwindcss-v4-alipay
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: taro-vite-vue3-tailwindcss-v4:tt
artifact_case: taro-vite-vue3-tailwindcss-v4-tt
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '10000'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-react-tailwindcss-v4:weapp
artifact_case: taro-webpack-react-tailwindcss-v4-weapp
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
watch_case: taro-webpack-vue3-tailwindcss-v4:weapp
artifact_case: taro-webpack-vue3-tailwindcss-v4-weapp
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4:mp-weixin
artifact_case: uni-app-vite-tailwindcss-v4-mp-weixin
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4:mp-alipay
artifact_case: uni-app-vite-tailwindcss-v4-mp-alipay
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4:mp-qq
artifact_case: uni-app-vite-tailwindcss-v4-mp-qq
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: uni-app-vite-tailwindcss-v4:mp-toutiao
artifact_case: uni-app-vite-tailwindcss-v4-mp-toutiao
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: macos-latest
runner_label: macos
watch_case: demo-core
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 55
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '2400000'
- os: macos-latest
runner_label: macos
watch_case: demo-taro-react
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '3300000'
- os: macos-latest
runner_label: macos
watch_case: demo-taro-vue3
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 75
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '3600000'
- os: macos-latest
runner_label: macos
watch_case: demo-uni
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 45
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '60000'
watch_command_timeout_ms: '1800000'
- os: windows-latest
runner_label: windows
watch_case: uni-app-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '420000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '9000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
watch_case: weapp-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 45
watch_timeout_ms: '320000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '6000'
watch_command_timeout_ms: '840000'
- os: windows-latest
runner_label: windows
watch_case: taro-vite-vue3-tailwindcss-v4
round_profile: default
watch_save_snapshots: '1'
timeout_minutes: 70
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_command_timeout_ms: '1800000'
- os: macos-latest
runner_label: macos
node-version: 24
watch_case: weapp-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 60
watch_timeout_ms: '600000'
watch_poll_ms: '40'
watch_max_plugin_process_ms: '6000'
watch_command_timeout_ms: '1500000'
- os: windows-latest
runner_label: windows
node-version: 24
watch_case: weapp-vite-tailwindcss-v4
round_profile: issue33
watch_save_snapshots: '1'
timeout_minutes: 45
watch_timeout_ms: '320000'
watch_poll_ms: '40'
watch_command_timeout_ms: '840000'
runs-on: ${{ matrix.os }}
timeout-minutes: ${{ matrix.timeout_minutes }}
steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ matrix['node-version'] || 22 }}
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Playwright Chromium
shell: bash
run: |
for attempt in 1 2 3 4; do
if pnpm --filter @weapp-tailwindcss/scripts exec playwright install chromium; then
exit 0
fi
echo "Playwright Chromium install failed, retrying (${attempt}/4)"
sleep $((attempt * 10))
done
pnpm --filter @weapp-tailwindcss/scripts exec playwright install chromium
- name: Build watch suite package dependencies
run: pnpm --filter weapp-tailwindcss... --filter "./packages-runtime/*" run build
- name: Prepare benchmark output directory
shell: bash
run: |
rm -f e2e/benchmark/e2e-watch-hmr/*.json
rm -rf e2e/benchmark/e2e-watch-hmr/snapshots
rm -rf e2e/benchmark/e2e-watch-hmr/failures
mkdir -p e2e/benchmark/e2e-watch-hmr/snapshots
mkdir -p e2e/benchmark/e2e-watch-hmr/failures
- name: Run e2e watch suite (nightly/full)
env:
E2E_WATCH_CASE: ${{ matrix.watch_case }}
E2E_WATCH_TIMEOUT_MS: ${{ matrix.watch_timeout_ms }}
E2E_WATCH_POLL_MS: ${{ matrix.watch_poll_ms }}
E2E_WATCH_MAX_HOT_UPDATE_MS: ${{ matrix.watch_max_hot_update_ms || matrix.watch_timeout_ms }}
E2E_WATCH_MAX_PLUGIN_PROCESS_MS: ${{ matrix.watch_max_plugin_process_ms || '6000' }}
E2E_WATCH_MAX_MEMORY_RSS_MB: ${{ matrix.watch_max_memory_rss_mb || '5632' }}
E2E_WATCH_MAX_MEMORY_RSS_DELTA_MB: ${{ matrix.watch_max_memory_rss_delta_mb || '4608' }}
E2E_WATCH_MAX_MEMORY_HEAP_USED_MB: ${{ matrix.watch_max_memory_heap_used_mb || '4096' }}
E2E_WATCH_COMMAND_TIMEOUT_MS: ${{ matrix.watch_command_timeout_ms }}
E2E_WATCH_MAX_ATTEMPTS: ${{ matrix.watch_max_attempts || '2' }}
E2E_WATCH_ROUND_PROFILE: ${{ matrix.round_profile }}
E2E_WATCH_SAVE_SNAPSHOTS: ${{ matrix.watch_save_snapshots }}
WEAPP_TW_HMR_MEMORY_DEBUG: '1'
NODE_OPTIONS: --max-old-space-size=6144
run: pnpm e2e:watch
- name: Generate failure diff summary
if: failure()
shell: bash
run: node .github/scripts/e2e-watch-report.cjs diff-summary
- name: Generate root cause attribution report
if: failure()
shell: bash
env:
WATCH_CASE: ${{ matrix.watch_case }}
run: node .github/scripts/e2e-watch-report.cjs root-cause-report
- name: Publish job summary
if: always()
shell: bash
run: node .github/scripts/e2e-watch-report.cjs job-summary
env:
SUMMARY_TITLE: e2e-watch nightly/full regression
WATCH_CASE: ${{ matrix.watch_case }}
ROUND_PROFILE: ${{ matrix.round_profile }}
- name: Upload e2e watch reports (always)
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-watch-hmr-nightly-${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.artifact_case || matrix.watch_case }}-${{ matrix.round_profile }}-${{ github.run_id }}
path: |
e2e/benchmark/e2e-watch-hmr/*.json
e2e/benchmark/e2e-watch-hmr/hmr-speed-report.md
e2e/benchmark/e2e-watch-hmr/hmr-memory-report.md
if-no-files-found: ignore
retention-days: 14
- name: Upload e2e watch failure artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-watch-hmr-nightly-failure-${{ matrix.runner_label }}-node${{ matrix['node-version'] || 22 }}-${{ matrix.artifact_case || matrix.watch_case }}-${{ matrix.round_profile }}-${{ github.run_id }}
path: |
e2e/benchmark/e2e-watch-hmr/snapshots/**
e2e/benchmark/e2e-watch-hmr/failures/**
if-no-files-found: ignore
retention-days: 14