Skip to content

Commit

Permalink
used shared worker for lint & typecheck steps (#74154)
Browse files Browse the repository at this point in the history
Similar to #73138, this removes the direct usage of `jest-worker` for
the linting/typechecking step in favor of the shared worker that has
built-in handling for propagating errors to the parent process. This is
to ensure that if the worker performing the typechecking/linting
receives a SIGKILL signal (which could happen with an OOM error), that
the parent process exits appropriately.
  • Loading branch information
ztanner committed Dec 24, 2024
1 parent df392a1 commit 420dd22
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 10 deletions.
10 changes: 4 additions & 6 deletions packages/next/src/build/type-check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { Span } from '../trace'

import path from 'path'
import * as Log from './output/log'
import { Worker as JestWorker } from 'next/dist/compiled/jest-worker'
import { Worker } from '../lib/worker'
import { verifyAndLint } from '../lib/verifyAndLint'
import createSpinner from './spinner'
import { eventTypeCheckCompleted } from '../telemetry/events'
Expand All @@ -30,20 +30,18 @@ function verifyTypeScriptSetup(
hasAppDir: boolean,
hasPagesDir: boolean
) {
const typeCheckWorker = new JestWorker(
const typeCheckWorker = new Worker(
require.resolve('../lib/verify-typescript-setup'),
{
exposedMethods: ['verifyTypeScriptSetup'],
numWorkers: 1,
enableWorkerThreads,
maxRetries: 0,
}
) as JestWorker & {
) as Worker & {
verifyTypeScriptSetup: typeof import('../lib/verify-typescript-setup').verifyTypeScriptSetup
}

typeCheckWorker.getStdout().pipe(process.stdout)
typeCheckWorker.getStderr().pipe(process.stderr)

return typeCheckWorker
.verifyTypeScriptSetup({
dir,
Expand Down
6 changes: 2 additions & 4 deletions packages/next/src/lib/verifyAndLint.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { red } from './picocolors'
import { Worker } from 'next/dist/compiled/jest-worker'
import { Worker } from './worker'
import { existsSync } from 'fs'
import { join } from 'path'
import { ESLINT_DEFAULT_DIRS } from './constants'
Expand All @@ -23,16 +23,14 @@ export async function verifyAndLint(

try {
lintWorkers = new Worker(require.resolve('./eslint/runLintCheck'), {
exposedMethods: ['runLintCheck'],
numWorkers: 1,
enableWorkerThreads,
maxRetries: 0,
}) as Worker & {
runLintCheck: typeof import('./eslint/runLintCheck').runLintCheck
}

lintWorkers.getStdout().pipe(process.stdout)
lintWorkers.getStderr().pipe(process.stderr)

const lintDirs = (configLintDirs ?? ESLINT_DEFAULT_DIRS).reduce(
(res: string[], d: string) => {
const currDir = join(dir, d)
Expand Down

0 comments on commit 420dd22

Please sign in to comment.