Version Packages #1415
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |