ci: setup windows ci for compiler and SSR tests (#8143)

This commit is contained in:
Evan You 2023-04-24 11:31:13 +08:00 committed by GitHub
parent 29da504687
commit 01f43c1741
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 13 deletions

View File

@ -26,11 +26,40 @@ jobs:
node-version: 18 node-version: 18
cache: 'pnpm' cache: 'pnpm'
- run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install - name: Skip Puppeteer download
run: echo "PUPPETEER_SKIP_DOWNLOAD=1" >> $GITHUB_ENV
- run: pnpm install
- name: Run unit tests - name: Run unit tests
run: pnpm run test-unit run: pnpm run test-unit
unit-test-windows:
runs-on: windows-latest
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
steps:
- uses: actions/checkout@v3
- name: Install pnpm
uses: pnpm/action-setup@v2
- name: Set node version to 18
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Skip Puppeteer download
run: echo "PUPPETEER_SKIP_DOWNLOAD=1" >> $env:GITHUB_ENV
- run: pnpm install
- name: Run compiler unit tests
run: pnpm run test-unit compiler
- name: Run ssr unit tests
run: pnpm run test-unit server-renderer
e2e-test: e2e-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
@ -72,7 +101,10 @@ jobs:
node-version: 18 node-version: 18
cache: 'pnpm' cache: 'pnpm'
- run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install - name: Skip Puppeteer download
run: echo "PUPPETEER_SKIP_DOWNLOAD=1" >> $GITHUB_ENV
- run: pnpm install
- name: Run eslint - name: Run eslint
run: pnpm run lint run: pnpm run lint

View File

@ -29,7 +29,8 @@ import {
createGetCanonicalFileName, createGetCanonicalFileName,
getId, getId,
getImportedName, getImportedName,
normalizePath normalizePath,
joinPaths
} from './utils' } from './utils'
import { ScriptCompileContext, resolveParserPlugins } from './context' import { ScriptCompileContext, resolveParserPlugins } from './context'
import { ImportBinding, SFCScriptCompileOptions } from '../compileScript' import { ImportBinding, SFCScriptCompileOptions } from '../compileScript'
@ -38,7 +39,7 @@ import { parse as babelParse } from '@babel/parser'
import { parse } from '../parse' import { parse } from '../parse'
import { createCache } from '../cache' import { createCache } from '../cache'
import type TS from 'typescript' import type TS from 'typescript'
import path from 'path' import { extname, dirname } from 'path'
/** /**
* TypeResolveContext is compatible with ScriptCompileContext * TypeResolveContext is compatible with ScriptCompileContext
@ -718,7 +719,7 @@ function importSourceToScope(
let resolved let resolved
if (source.startsWith('.')) { if (source.startsWith('.')) {
// relative import - fast path // relative import - fast path
const filename = normalizePath(path.join(scope.filename, '..', source)) const filename = joinPaths(scope.filename, '..', source)
resolved = resolveExt(filename, fs) resolved = resolveExt(filename, fs)
} else { } else {
// module or aliased import - use full TS resolution, only supported in Node // module or aliased import - use full TS resolution, only supported in Node
@ -741,9 +742,10 @@ function importSourceToScope(
resolved = resolveWithTS(scope.filename, source, fs) resolved = resolveWithTS(scope.filename, source, fs)
} }
if (resolved) { if (resolved) {
resolved = normalizePath(resolved)
// (hmr) register dependency file on ctx // (hmr) register dependency file on ctx
;(ctx.deps || (ctx.deps = new Set())).add(resolved) ;(ctx.deps || (ctx.deps = new Set())).add(resolved)
return fileToScope(ctx, normalizePath(resolved)) return fileToScope(ctx, resolved)
} else { } else {
return ctx.error( return ctx.error(
`Failed to resolve import source ${JSON.stringify(source)}.`, `Failed to resolve import source ${JSON.stringify(source)}.`,
@ -761,8 +763,8 @@ function resolveExt(filename: string, fs: FS) {
tryResolve(filename) || tryResolve(filename) ||
tryResolve(filename + `.ts`) || tryResolve(filename + `.ts`) ||
tryResolve(filename + `.d.ts`) || tryResolve(filename + `.d.ts`) ||
tryResolve(filename + `/index.ts`) || tryResolve(joinPaths(filename, `index.ts`)) ||
tryResolve(filename + `/index.d.ts`) tryResolve(joinPaths(filename, `index.d.ts`))
) )
} }
@ -800,7 +802,7 @@ function resolveWithTS(
const parsed = ts.parseJsonConfigFileContent( const parsed = ts.parseJsonConfigFileContent(
ts.readConfigFile(configPath, fs.readFile).config, ts.readConfigFile(configPath, fs.readFile).config,
parseConfigHost, parseConfigHost,
path.dirname(configPath), dirname(configPath),
undefined, undefined,
configPath configPath
) )
@ -870,7 +872,7 @@ function parseFile(
content: string, content: string,
parserPlugins?: SFCScriptCompileOptions['babelParserPlugins'] parserPlugins?: SFCScriptCompileOptions['babelParserPlugins']
): Statement[] { ): Statement[] {
const ext = path.extname(filename) const ext = extname(filename)
if (ext === '.ts' || ext === '.tsx') { if (ext === '.ts' || ext === '.tsx') {
return babelParse(content, { return babelParse(content, {
plugins: resolveParserPlugins(ext.slice(1), parserPlugins), plugins: resolveParserPlugins(ext.slice(1), parserPlugins),

View File

@ -99,9 +99,12 @@ export function createGetCanonicalFileName(useCaseSensitiveFileNames: boolean) {
return useCaseSensitiveFileNames ? identity : toFileNameLowerCase return useCaseSensitiveFileNames ? identity : toFileNameLowerCase
} }
// in the browser build, the polyfill doesn't expose posix, but defaults to
// posix behavior.
const normalize = (path.posix || path).normalize
const windowsSlashRE = /\\/g const windowsSlashRE = /\\/g
export function normalizePath(p: string) { export function normalizePath(p: string) {
// in the browser build, the polyfill doesn't expose posix, but defaults to return normalize(p.replace(windowsSlashRE, '/'))
// posix behavior.
return (path.posix || path).normalize(p.replace(windowsSlashRE, '/'))
} }
export const joinPaths = (path.posix || path).join