ci: add Windows Defender disable to e2e-test.yml #2329
Workflow file for this run
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 Test | |
| permissions: {} | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| # Run every day at 0:00 GMT (8:00 AM Singapore time) | |
| - cron: '0 0 * * *' | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**/*.md' | |
| pull_request: | |
| types: [opened, synchronize, labeled] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
| cancel-in-progress: ${{ github.ref_name != 'main' }} | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| detect-changes: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| outputs: | |
| related-files-changed: ${{ steps.filter.outputs.related-files }} | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: filter | |
| with: | |
| filters: | | |
| related-files: | |
| - 'packages/**/build.ts' | |
| - .github/workflows/e2e-test.yml | |
| - 'ecosystem-ci/*' | |
| download-previous-rolldown-binaries: | |
| needs: detect-changes | |
| runs-on: ubuntu-latest | |
| # Run if: not a PR, OR PR has 'test: e2e' label, OR PR is from deps/upstream-update branch, OR build.ts files changed | |
| if: >- | |
| github.event_name != 'pull_request' || | |
| contains(github.event.pull_request.labels.*.name, 'test: e2e') || | |
| github.head_ref == 'deps/upstream-update' || | |
| needs.detect-changes.outputs.related-files-changed == 'true' | |
| permissions: | |
| contents: read | |
| packages: read | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - uses: ./.github/actions/download-rolldown-binaries | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| build: | |
| name: Build vite-plus packages (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| contents: read | |
| packages: read | |
| needs: | |
| - download-previous-rolldown-binaries | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - uses: ./.github/actions/clone | |
| - name: Configure Git for access to vite-task | |
| run: git config --global url."https://x-access-token:${{ secrets.VITE_TASK_TOKEN }}@github.com/".insteadOf "ssh://git@github.com/" | |
| # Disable Windows Defender real-time scanning to speed up I/O-heavy builds (~30-50% faster) | |
| - name: Disable Windows Defender | |
| if: runner.os == 'Windows' | |
| shell: powershell | |
| run: Set-MpPreference -DisableRealtimeMonitoring $true | |
| - uses: oxc-project/setup-rust@d286d43bc1f606abbd98096666ff8be68c8d5f57 # v1.0.0 | |
| with: | |
| save-cache: ${{ github.ref_name == 'main' }} | |
| cache-key: e2e-build-${{ matrix.os }} | |
| - uses: oxc-project/setup-node@fdbf0dfd334c4e6d56ceeb77d91c76339c2a0885 # v1.0.4 | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: rolldown-binaries | |
| path: ./rolldown/packages/rolldown/src | |
| merge-multiple: true | |
| - name: Build with upstream | |
| uses: ./.github/actions/build-upstream | |
| with: | |
| target: ${{ matrix.target }} | |
| - name: Pack packages into tgz | |
| run: | | |
| mkdir -p tmp/tgz | |
| cd packages/core && pnpm pack --pack-destination ../../tmp/tgz && cd ../.. | |
| cd packages/test && pnpm pack --pack-destination ../../tmp/tgz && cd ../.. | |
| cd packages/cli && pnpm pack --pack-destination ../../tmp/tgz && cd ../.. | |
| # Copy vp binary for e2e-test job (findVpBinary expects it in target/) | |
| cp target/${{ matrix.target }}/release/vp tmp/tgz/vp 2>/dev/null || cp target/${{ matrix.target }}/release/vp.exe tmp/tgz/vp.exe 2>/dev/null || true | |
| ls -la tmp/tgz | |
| - name: Upload tgz artifacts | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: vite-plus-packages-${{ matrix.os }} | |
| path: tmp/tgz/ | |
| retention-days: 1 | |
| e2e-test: | |
| name: ${{ matrix.project.name }} E2E test (${{ matrix.os }}) | |
| env: | |
| # For packing manager install from github package registry | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| permissions: | |
| contents: read | |
| packages: read | |
| needs: | |
| - build | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 10 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| project: | |
| - name: vibe-dashboard | |
| node-version: 24 | |
| command: | | |
| npx playwright install chromium | |
| # FIXME: Failed to load JS plugin: ./plugins/debugger.js | |
| # vp run ready | |
| vp fmt | |
| vp test | |
| vp run build | |
| # FIXME: TypeError: Failed to fetch dynamically imported module | |
| # - name: skeleton | |
| # node-version: 24 | |
| # command: | | |
| # vp run format | |
| # vp run lint:check | |
| # vp run check | |
| # npx playwright install chromium | |
| # vp run test | |
| - name: rollipop | |
| node-version: 22 | |
| command: | | |
| vp run -r build | |
| # FIXME: typescript-eslint(no-redundant-type-constituents): 'rolldownExperimental.DevEngine' is an 'error' type that acts as 'any' and overrides all other types in this union type. | |
| vp run lint || true | |
| # FIXME: src/bundler-pool.ts(8,8): error TS2307: Cannot find module '@rollipop/core' or its corresponding type declarations. | |
| vp run -r typecheck || true | |
| vp run format | |
| vp run @rollipop/common#test | |
| vp run @rollipop/core#test | |
| vp run @rollipop/dev-server#test | |
| - name: frm-stack | |
| node-version: 24 | |
| command: | | |
| vp run lint:check | |
| vp run format:check | |
| vp run typecheck | |
| vp run @yourcompany/api#test | |
| vp run @yourcompany/backend-core#test | |
| - name: vue-mini | |
| node-version: 24 | |
| command: | | |
| vp run format | |
| vp run lint | |
| vp run type | |
| vp run test -- --coverage | |
| # SKIP: vite-plugin-react - vite-task config loading incompatibility | |
| # vite-task needs to load vite.config.js for all workspace packages to build the task graph, | |
| # but the vite-plus process starts with workspace root as cwd. | |
| # The plugin-react-swc playgrounds use SWC plugins (e.g., @swc/plugin-emotion) which | |
| # cannot be resolved when loading the config from workspace root. | |
| # | |
| # Minimal reproduction: | |
| # git clone https://github.com/vitejs/vite-plugin-react /tmp/vite-plugin-react-test | |
| # cd /tmp/vite-plugin-react-test && pnpm install && pnpm run build | |
| # node packages/plugin-react-swc/playground/emotion-plugin/vite.config.js | |
| # # Error: Cannot find module '@swc/plugin-emotion' | |
| # | |
| # This works when running from within the playground directory (pnpm run build) | |
| # because pnpm's symlink structure allows resolution, but fails when loading from workspace root. | |
| # - name: vite-plugin-react | |
| # node-version: 22 | |
| # command: | | |
| # vp run format | |
| # vp run lint -- --fix | |
| # # TODO(fengmk2): run all builds and tests after tsdown version upgrade | |
| # vp run @vitejs/plugin-rsc#build | |
| # vp run @vitejs/plugin-rsc#test | |
| - name: vitepress | |
| node-version: 24 | |
| command: | | |
| npx playwright install chromium | |
| vp run format | |
| vp run build | |
| vp test run -r __tests__/unit | |
| vp run tests-e2e#test | |
| VITE_TEST_BUILD=1 vp run tests-e2e#test | |
| vp run tests-init#test | |
| - name: tanstack-start-helloworld | |
| node-version: 24 | |
| command: | | |
| npx playwright install chromium | |
| vp run test | |
| vp run build | |
| - name: oxlint-plugin-complexity | |
| node-version: 22 | |
| command: | | |
| vp run format | |
| vp run format:check | |
| vp run build | |
| vp run lint | |
| vp run test:run | |
| npx tsc --noEmit | |
| - name: vite-vue-vercel | |
| node-version: 24 | |
| command: | | |
| npx playwright install chromium | |
| vp run test | |
| vp run build | |
| - name: dify | |
| node-version: 24 | |
| directory: web | |
| command: | | |
| vp run type-check:tsgo | |
| vp run build | |
| vp run test navigation-utils.test.ts real-browser-flicker.test.tsx workflow-parallel-limit.test.tsx | |
| exclude: | |
| # frm-stack uses Docker (testcontainers) which doesn't work the same way on Windows | |
| - os: windows-latest | |
| project: | |
| name: frm-stack | |
| # dify only runs on Linux for now | |
| - os: windows-latest | |
| project: | |
| name: dify | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - uses: ./.github/actions/clone | |
| with: | |
| ecosystem-ci-project: ${{ matrix.project.name }} | |
| # Disable Windows Defender real-time scanning to speed up I/O-heavy operations | |
| - name: Disable Windows Defender | |
| if: runner.os == 'Windows' | |
| shell: powershell | |
| run: Set-MpPreference -DisableRealtimeMonitoring $true | |
| - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 | |
| with: | |
| node-version: ${{ matrix.project.node-version }} | |
| package-manager-cache: false | |
| - name: Download vite-plus packages | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: vite-plus-packages-${{ matrix.os }} | |
| path: tmp/tgz | |
| - name: Install vp CLI | |
| shell: bash | |
| run: | | |
| # Place vp binary where install-global-cli.ts expects it (target/release/) | |
| mkdir -p target/release | |
| cp tmp/tgz/vp target/release/vp 2>/dev/null || cp tmp/tgz/vp.exe target/release/vp.exe 2>/dev/null || true | |
| chmod +x target/release/vp 2>/dev/null || true | |
| node $GITHUB_WORKSPACE/packages/tools/src/install-global-cli.ts --tgz $GITHUB_WORKSPACE/tmp/tgz/vite-plus-0.0.0.tgz | |
| echo "$HOME/.vite-plus/bin" >> $GITHUB_PATH | |
| - name: Migrate in ${{ matrix.project.name }} | |
| working-directory: ${{ runner.temp }}/vite-plus-ecosystem-ci/${{ matrix.project.name }}${{ matrix.project.directory && format('/{0}', matrix.project.directory) || '' }} | |
| run: | | |
| node $GITHUB_WORKSPACE/ecosystem-ci/patch-project.ts ${{ matrix.project.name }} | |
| vp install --no-frozen-lockfile | |
| - name: Run vite-plus commands in ${{ matrix.project.name }} | |
| working-directory: ${{ runner.temp }}/vite-plus-ecosystem-ci/${{ matrix.project.name }}${{ matrix.project.directory && format('/{0}', matrix.project.directory) || '' }} | |
| run: ${{ matrix.project.command }} | |
| notify-failure: | |
| name: Notify on failure | |
| runs-on: ubuntu-latest | |
| needs: e2e-test | |
| if: ${{ failure() && github.event_name == 'schedule' }} | |
| permissions: | |
| contents: read | |
| issues: write | |
| steps: | |
| - name: Create or update GitHub issue on failure | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GH_REPO: ${{ github.repository }} | |
| run: | | |
| ISSUE_TITLE="E2E Test Scheduled Run Failed" | |
| ISSUE_LABEL="e2e-failure" | |
| RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
| # Create label if it doesn't exist | |
| if ! gh label list --json name --jq '.[].name' | grep -q "^${ISSUE_LABEL}$"; then | |
| CREATE_LABEL_OUTPUT=$(gh label create "$ISSUE_LABEL" --color "d73a4a" --description "E2E test scheduled run failure" 2>&1) | |
| if [ $? -eq 0 ]; then | |
| echo "Created label: $ISSUE_LABEL" | |
| elif echo "$CREATE_LABEL_OUTPUT" | grep -qi "already exists"; then | |
| echo "Label '$ISSUE_LABEL' already exists, continuing." | |
| else | |
| echo "Error: Failed to create label '$ISSUE_LABEL':" | |
| echo "$CREATE_LABEL_OUTPUT" >&2 | |
| exit 1 | |
| fi | |
| fi | |
| # Search for existing open issue with the label | |
| EXISTING_ISSUE=$(gh issue list --label "$ISSUE_LABEL" --state open --json number --jq '.[0].number') | |
| if [ -z "$EXISTING_ISSUE" ]; then | |
| # Create new issue if none exists | |
| gh issue create \ | |
| --title "$ISSUE_TITLE" \ | |
| --label "$ISSUE_LABEL" \ | |
| --body "The scheduled E2E test run has failed. | |
| **Failed Run:** $RUN_URL | |
| **Time:** $(date -u '+%Y-%m-%d %H:%M:%S UTC') | |
| Please investigate the failure and fix any issues." | |
| echo "Created new issue" | |
| else | |
| # Add comment to existing issue | |
| gh issue comment "$EXISTING_ISSUE" \ | |
| --body "The scheduled E2E test run has failed again. | |
| **Failed Run:** $RUN_URL | |
| **Time:** $(date -u '+%Y-%m-%d %H:%M:%S UTC')" | |
| echo "Added comment to issue #$EXISTING_ISSUE" | |
| fi |