mirror of
https://github.com/vitest-dev/vitest.git
synced 2025-12-08 18:26:03 +00:00
249 lines
6.0 KiB
YAML
249 lines
6.0 KiB
YAML
name: CI
|
|
|
|
# Remove default permissions of GITHUB_TOKEN for security
|
|
# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
|
|
permissions: {}
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
pull_request:
|
|
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ci-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.cache/ms-playwright
|
|
VITEST_GENERATE_UI_TOKEN: 'true'
|
|
|
|
jobs:
|
|
lint:
|
|
timeout-minutes: 10
|
|
runs-on: ubuntu-latest
|
|
name: 'Lint: node-latest, ubuntu-latest'
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/setup-and-cache
|
|
|
|
- name: Install
|
|
run: pnpm i
|
|
|
|
- name: Build
|
|
run: pnpm run build
|
|
|
|
# check uncommited LICENSE.md, auto-imports.d.ts, etc...
|
|
- name: Check stale build artifacts
|
|
run: git diff --exit-code
|
|
|
|
- name: Lint
|
|
run: pnpm run lint
|
|
|
|
- name: Typecheck
|
|
run: pnpm run typecheck
|
|
|
|
- name: Typecheck UI
|
|
run: pnpm run -C packages/ui typecheck:client
|
|
|
|
# From https://github.com/rhysd/actionlint/blob/main/docs/usage.md#use-actionlint-on-github-actions
|
|
- name: Check workflow files
|
|
run: |
|
|
bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
|
|
./actionlint -color -shellcheck=""
|
|
|
|
changed:
|
|
runs-on: ubuntu-latest
|
|
name: 'Diff: node-latest, ubuntu-latest'
|
|
outputs:
|
|
should_skip: ${{ steps.changed-files.outputs.only_changed == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Get changed files
|
|
id: changed-files
|
|
uses: tj-actions/changed-files@a284dc1814e3fd07f2e34267fc8f81227ed29fb8 # v45.0.9
|
|
with:
|
|
files: |
|
|
docs/**
|
|
.github/**
|
|
!.github/workflows/ci.yml
|
|
**.md
|
|
|
|
test:
|
|
needs: changed
|
|
name: 'Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}'
|
|
if: needs.changed.outputs.should_skip != 'true'
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
timeout-minutes: 30
|
|
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest]
|
|
node_version: [20, 22, 24]
|
|
include:
|
|
- os: macos-latest
|
|
node_version: 24
|
|
- os: windows-latest
|
|
node_version: 24
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/setup-and-cache
|
|
with:
|
|
node-version: ${{ matrix.node_version }}
|
|
|
|
- uses: browser-actions/setup-chrome@b94431e051d1c52dcbe9a7092a4f10f827795416 # v2.1.0
|
|
|
|
- name: Install
|
|
run: pnpm i
|
|
|
|
- uses: ./.github/actions/setup-playwright
|
|
|
|
- name: Build
|
|
run: pnpm run build
|
|
|
|
- name: Test
|
|
run: pnpm run test:ci
|
|
|
|
- name: Test Examples
|
|
run: pnpm run test:examples
|
|
|
|
- name: Unit Test UI
|
|
run: pnpm run -C packages/ui test:ui
|
|
|
|
- uses: actions/upload-artifact@v5
|
|
if: ${{ !cancelled() }}
|
|
with:
|
|
name: playwright-report
|
|
path: test/ui/test-results/
|
|
retention-days: 30
|
|
|
|
test-cached:
|
|
needs: changed
|
|
name: 'Cache&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}'
|
|
if: needs.changed.outputs.should_skip != 'true'
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
timeout-minutes: 30
|
|
|
|
strategy:
|
|
matrix:
|
|
node_version: [24]
|
|
os:
|
|
- macos-latest
|
|
- windows-latest
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/setup-and-cache
|
|
with:
|
|
node-version: ${{ matrix.node_version }}
|
|
|
|
- uses: browser-actions/setup-chrome@b94431e051d1c52dcbe9a7092a4f10f827795416 # v2.1.0
|
|
|
|
- name: Install
|
|
run: pnpm i
|
|
|
|
- uses: ./.github/actions/setup-playwright
|
|
|
|
- name: Build
|
|
run: pnpm run build
|
|
|
|
- name: Test
|
|
run: pnpm run test:ci:cache
|
|
|
|
test-browser:
|
|
needs: changed
|
|
name: 'Browsers: node-${{ matrix.node_version }}, ${{ matrix.os }}'
|
|
if: needs.changed.outputs.should_skip != 'true'
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
node_version: [24]
|
|
os:
|
|
- macos-latest
|
|
- windows-latest
|
|
fail-fast: false
|
|
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/setup-and-cache
|
|
with:
|
|
node-version: ${{ matrix.node_version }}
|
|
|
|
- uses: browser-actions/setup-chrome@b94431e051d1c52dcbe9a7092a4f10f827795416 # v2.1.0
|
|
- uses: browser-actions/setup-firefox@5914774dda97099441f02628f8d46411fcfbd208 # v1.7.0
|
|
|
|
- name: Install
|
|
run: pnpm i
|
|
|
|
- uses: ./.github/actions/setup-playwright
|
|
|
|
- name: Build
|
|
run: pnpm run build
|
|
|
|
- name: Test Browser (playwright)
|
|
run: pnpm run test:browser:playwright
|
|
|
|
- name: Test Browser (webdriverio)
|
|
run: pnpm run test:browser:webdriverio
|
|
|
|
test-rolldown:
|
|
needs: changed
|
|
# macos-latest is the fastest one
|
|
name: 'Rolldown&Test: node-22, macos-latest'
|
|
if: needs.changed.outputs.should_skip != 'true'
|
|
runs-on: macos-latest
|
|
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: ./.github/actions/setup-and-cache
|
|
with:
|
|
node-version: 22
|
|
|
|
- uses: browser-actions/setup-chrome@b94431e051d1c52dcbe9a7092a4f10f827795416 # v2.1.0
|
|
|
|
- name: Install
|
|
run: |
|
|
yq -i '.overrides.vite = "npm:rolldown-vite"' pnpm-workspace.yaml
|
|
git add . && git commit -m "ci" && pnpm i --prefer-offline --no-frozen-lockfile
|
|
|
|
- uses: ./.github/actions/setup-playwright
|
|
|
|
- name: Build
|
|
run: pnpm run build
|
|
|
|
- name: Test
|
|
run: pnpm run test:ci
|
|
|
|
- name: Test Examples
|
|
run: pnpm run test:examples
|
|
|
|
- name: Test Browser (playwright)
|
|
run: pnpm run test:browser:playwright
|
|
|
|
- uses: actions/upload-artifact@v5
|
|
if: ${{ !cancelled() }}
|
|
with:
|
|
name: playwright-report-rolldown
|
|
path: rolldown/test/ui/test-results/
|
|
retention-days: 30
|