diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a6f0cbf5227ba..06475d7f7736c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,167 +1,167 @@ -name: CI - -env: - # 7 GiB by default on GitHub, setting to 6 GiB - # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources - NODE_OPTIONS: --max-old-space-size=6144 - # install playwright binary manually (because pnpm only runs install script once) - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" - # Vitest auto retry on flaky segfault - VITEST_SEGFAULT_RETRY: 3 - -# 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 - - release/* - - feat/* - - fix/* - - perf/* - - v1 - - v2 - - v2.* - - v3.* - pull_request: - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.event.number || github.sha }} - cancel-in-progress: true - -jobs: - test: - timeout-minutes: 20 - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - node_version: [18, 20, 22] - include: - # Active LTS + other OS - - os: macos-latest - node_version: 20 - - os: windows-latest - node_version: 20 - fail-fast: false - - name: "Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}" - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - # Assume PRs are less than 50 commits - fetch-depth: 50 - - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@cc733854b1f224978ef800d29e4709d5ee2883e4 # v44.5.5 - with: - files: | - docs/** - .github/** - !.github/workflows/ci.yml - packages/create-vite/template** - **.md - - - name: Install pnpm - if: steps.changed-files.outputs.only_changed != 'true' - uses: pnpm/action-setup@v4.0.0 - - - name: Set node version to ${{ matrix.node_version }} - if: steps.changed-files.outputs.only_changed != 'true' - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node_version }} - cache: "pnpm" - - - name: Install deps - if: steps.changed-files.outputs.only_changed != 'true' - run: pnpm install - - # Install playwright's binary under custom directory to cache - - name: (non-windows) Set Playwright path and Get playwright version - if: runner.os != 'Windows' && steps.changed-files.outputs.only_changed != 'true' - run: | - echo "PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/playwright-bin" >> $GITHUB_ENV - PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')" - echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV - - name: (windows) Set Playwright path and Get playwright version - if: runner.os == 'Windows' && steps.changed-files.outputs.only_changed != 'true' - run: | - echo "PLAYWRIGHT_BROWSERS_PATH=$HOME\.cache\playwright-bin" >> $env:GITHUB_ENV - $env:PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')" - echo "PLAYWRIGHT_VERSION=$env:PLAYWRIGHT_VERSION" >> $env:GITHUB_ENV - - - name: Cache Playwright's binary - if: steps.changed-files.outputs.only_changed != 'true' - uses: actions/cache@v4 - with: - key: ${{ runner.os }}-playwright-bin-v1-${{ env.PLAYWRIGHT_VERSION }} - path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} - restore-keys: | - ${{ runner.os }}-playwright-bin-v1- - - - name: Install Playwright - if: steps.changed-files.outputs.only_changed != 'true' - # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved - run: pnpm playwright install chromium - - - name: Build - if: steps.changed-files.outputs.only_changed != 'true' - run: pnpm run build - - - name: Test unit - if: steps.changed-files.outputs.only_changed != 'true' - run: pnpm run test-unit - - - name: Test serve - if: steps.changed-files.outputs.only_changed != 'true' - run: pnpm run test-serve - - - name: Test build - if: steps.changed-files.outputs.only_changed != 'true' - run: pnpm run test-build - - lint: - timeout-minutes: 10 - runs-on: ubuntu-latest - name: "Lint: node-20, ubuntu-latest" - steps: - - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v4.0.0 - - - name: Set node version to 20 - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: "pnpm" - - - name: Install deps - run: pnpm install - - - name: Build - run: pnpm run build - - - name: Lint - run: pnpm run lint - - - name: Check formatting - run: pnpm prettier --check . - - - name: Typecheck - run: pnpm run typecheck - - - name: Test docs - run: pnpm run test-docs - - # 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="" +# name: CI +# +# env: +# # 7 GiB by default on GitHub, setting to 6 GiB +# # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources +# NODE_OPTIONS: --max-old-space-size=6144 +# # install playwright binary manually (because pnpm only runs install script once) +# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" +# # Vitest auto retry on flaky segfault +# VITEST_SEGFAULT_RETRY: 3 +# +# # 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 +# - release/* +# - feat/* +# - fix/* +# - perf/* +# - v1 +# - v2 +# - v2.* +# - v3.* +# pull_request: +# workflow_dispatch: +# +# concurrency: +# group: ${{ github.workflow }}-${{ github.event.number || github.sha }} +# cancel-in-progress: true +# +# jobs: +# test: +# timeout-minutes: 20 +# runs-on: ${{ matrix.os }} +# strategy: +# matrix: +# os: [ubuntu-latest] +# node_version: [18, 20, 22] +# include: +# # Active LTS + other OS +# - os: macos-latest +# node_version: 20 +# - os: windows-latest +# node_version: 20 +# fail-fast: false +# +# name: "Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}" +# steps: +# - name: Checkout +# uses: actions/checkout@v4 +# with: +# # Assume PRs are less than 50 commits +# fetch-depth: 50 +# +# - name: Get changed files +# id: changed-files +# uses: tj-actions/changed-files@cc733854b1f224978ef800d29e4709d5ee2883e4 # v44.5.5 +# with: +# files: | +# docs/** +# .github/** +# !.github/workflows/ci.yml +# packages/create-vite/template** +# **.md +# +# - name: Install pnpm +# if: steps.changed-files.outputs.only_changed != 'true' +# uses: pnpm/action-setup@v4.0.0 +# +# - name: Set node version to ${{ matrix.node_version }} +# if: steps.changed-files.outputs.only_changed != 'true' +# uses: actions/setup-node@v4 +# with: +# node-version: ${{ matrix.node_version }} +# cache: "pnpm" +# +# - name: Install deps +# if: steps.changed-files.outputs.only_changed != 'true' +# run: pnpm install +# +# # Install playwright's binary under custom directory to cache +# - name: (non-windows) Set Playwright path and Get playwright version +# if: runner.os != 'Windows' && steps.changed-files.outputs.only_changed != 'true' +# run: | +# echo "PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/playwright-bin" >> $GITHUB_ENV +# PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')" +# echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV +# - name: (windows) Set Playwright path and Get playwright version +# if: runner.os == 'Windows' && steps.changed-files.outputs.only_changed != 'true' +# run: | +# echo "PLAYWRIGHT_BROWSERS_PATH=$HOME\.cache\playwright-bin" >> $env:GITHUB_ENV +# $env:PLAYWRIGHT_VERSION="$(pnpm ls --depth 0 --json -w playwright-chromium | jq --raw-output '.[0].devDependencies["playwright-chromium"].version')" +# echo "PLAYWRIGHT_VERSION=$env:PLAYWRIGHT_VERSION" >> $env:GITHUB_ENV +# +# - name: Cache Playwright's binary +# if: steps.changed-files.outputs.only_changed != 'true' +# uses: actions/cache@v4 +# with: +# key: ${{ runner.os }}-playwright-bin-v1-${{ env.PLAYWRIGHT_VERSION }} +# path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} +# restore-keys: | +# ${{ runner.os }}-playwright-bin-v1- +# +# - name: Install Playwright +# if: steps.changed-files.outputs.only_changed != 'true' +# # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved +# run: pnpm playwright install chromium +# +# - name: Build +# if: steps.changed-files.outputs.only_changed != 'true' +# run: pnpm run build +# +# - name: Test unit +# if: steps.changed-files.outputs.only_changed != 'true' +# run: pnpm run test-unit +# +# - name: Test serve +# if: steps.changed-files.outputs.only_changed != 'true' +# run: pnpm run test-serve +# +# - name: Test build +# if: steps.changed-files.outputs.only_changed != 'true' +# run: pnpm run test-build +# +# lint: +# timeout-minutes: 10 +# runs-on: ubuntu-latest +# name: "Lint: node-20, ubuntu-latest" +# steps: +# - uses: actions/checkout@v4 +# +# - name: Install pnpm +# uses: pnpm/action-setup@v4.0.0 +# +# - name: Set node version to 20 +# uses: actions/setup-node@v4 +# with: +# node-version: 20 +# cache: "pnpm" +# +# - name: Install deps +# run: pnpm install +# +# - name: Build +# run: pnpm run build +# +# - name: Lint +# run: pnpm run lint +# +# - name: Check formatting +# run: pnpm prettier --check . +# +# - name: Typecheck +# run: pnpm run typecheck +# +# - name: Test docs +# run: pnpm run test-docs +# +# # 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="" diff --git a/.github/workflows/ecosystem-ci-trigger.yml b/.github/workflows/ecosystem-ci-trigger.yml index 6a48065cb7759d..f58778e65b9fc9 100644 --- a/.github/workflows/ecosystem-ci-trigger.yml +++ b/.github/workflows/ecosystem-ci-trigger.yml @@ -1,93 +1,93 @@ -name: ecosystem-ci trigger - -on: - issue_comment: - types: [created] - -jobs: - trigger: - runs-on: ubuntu-latest - if: github.repository == 'vitejs/vite' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/ecosystem-ci run') - steps: - - uses: actions/github-script@v7 - with: - script: | - const user = context.payload.sender.login - console.log(`Validate user: ${user}`) - - let hasTriagePermission = false - try { - const { data } = await github.rest.repos.getCollaboratorPermissionLevel({ - owner: context.repo.owner, - repo: context.repo.repo, - username: user, - }); - hasTriagePermission = data.user.permissions.triage - } catch (e) { - console.warn(e) - } - - if (hasTriagePermission) { - console.log('Allowed') - await github.rest.reactions.createForIssueComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: context.payload.comment.id, - content: '+1', - }) - } else { - console.log('Not allowed') - await github.rest.reactions.createForIssueComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: context.payload.comment.id, - content: '-1', - }) - throw new Error('not allowed') - } - - uses: actions/github-script@v7 - id: get-pr-data - with: - script: | - console.log(`Get PR info: ${context.repo.owner}/${context.repo.repo}#${context.issue.number}`) - const { data: pr } = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: context.issue.number - }) - return { - num: context.issue.number, - branchName: pr.head.ref, - repo: pr.head.repo.full_name - } - - id: generate-token - uses: tibdex/github-app-token@v2 - with: - app_id: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_ID }} - installation_retrieval_payload: "${{ github.repository_owner }}/vite-ecosystem-ci" - private_key: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_PRIVATE_KEY }} - - uses: actions/github-script@v7 - id: trigger - env: - COMMENT: ${{ github.event.comment.body }} - with: - github-token: ${{ steps.generate-token.outputs.token }} - result-encoding: string - script: | - const comment = process.env.COMMENT.trim() - const prData = ${{ steps.get-pr-data.outputs.result }} - - const suite = comment.split('\n')[0].replace(/^\/ecosystem-ci run/, '').trim() - - await github.rest.actions.createWorkflowDispatch({ - owner: context.repo.owner, - repo: 'vite-ecosystem-ci', - workflow_id: 'ecosystem-ci-from-pr.yml', - ref: 'main', - inputs: { - prNumber: '' + prData.num, - branchName: prData.branchName, - repo: prData.repo, - suite: suite === '' ? '-' : suite - } - }) +# name: ecosystem-ci trigger +# +# on: +# issue_comment: +# types: [created] +# +# jobs: +# trigger: +# runs-on: ubuntu-latest +# if: github.repository == 'vitejs/vite' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/ecosystem-ci run') +# steps: +# - uses: actions/github-script@v7 +# with: +# script: | +# const user = context.payload.sender.login +# console.log(`Validate user: ${user}`) +# +# let hasTriagePermission = false +# try { +# const { data } = await github.rest.repos.getCollaboratorPermissionLevel({ +# owner: context.repo.owner, +# repo: context.repo.repo, +# username: user, +# }); +# hasTriagePermission = data.user.permissions.triage +# } catch (e) { +# console.warn(e) +# } +# +# if (hasTriagePermission) { +# console.log('Allowed') +# await github.rest.reactions.createForIssueComment({ +# owner: context.repo.owner, +# repo: context.repo.repo, +# comment_id: context.payload.comment.id, +# content: '+1', +# }) +# } else { +# console.log('Not allowed') +# await github.rest.reactions.createForIssueComment({ +# owner: context.repo.owner, +# repo: context.repo.repo, +# comment_id: context.payload.comment.id, +# content: '-1', +# }) +# throw new Error('not allowed') +# } +# - uses: actions/github-script@v7 +# id: get-pr-data +# with: +# script: | +# console.log(`Get PR info: ${context.repo.owner}/${context.repo.repo}#${context.issue.number}`) +# const { data: pr } = await github.rest.pulls.get({ +# owner: context.repo.owner, +# repo: context.repo.repo, +# pull_number: context.issue.number +# }) +# return { +# num: context.issue.number, +# branchName: pr.head.ref, +# repo: pr.head.repo.full_name +# } +# - id: generate-token +# uses: tibdex/github-app-token@v2 +# with: +# app_id: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_ID }} +# installation_retrieval_payload: "${{ github.repository_owner }}/vite-ecosystem-ci" +# private_key: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_PRIVATE_KEY }} +# - uses: actions/github-script@v7 +# id: trigger +# env: +# COMMENT: ${{ github.event.comment.body }} +# with: +# github-token: ${{ steps.generate-token.outputs.token }} +# result-encoding: string +# script: | +# const comment = process.env.COMMENT.trim() +# const prData = ${{ steps.get-pr-data.outputs.result }} +# +# const suite = comment.split('\n')[0].replace(/^\/ecosystem-ci run/, '').trim() +# +# await github.rest.actions.createWorkflowDispatch({ +# owner: context.repo.owner, +# repo: 'vite-ecosystem-ci', +# workflow_id: 'ecosystem-ci-from-pr.yml', +# ref: 'main', +# inputs: { +# prNumber: '' + prData.num, +# branchName: prData.branchName, +# repo: prData.repo, +# suite: suite === '' ? '-' : suite +# } +# })