mirror of https://github.com/vuejs/core.git
ci: setup windows ci for compiler and SSR tests (#8143)
This commit is contained in:
parent
29da504687
commit
01f43c1741
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue