Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure specific webpack mode is used in test jobs #25427

Closed
wants to merge 2 commits into from

Conversation

ijjk
Copy link
Member

@ijjk ijjk commented May 24, 2021

This updates the test jobs to force test integration to use webpack 4 and then only force webpack 5 in the webpack 5 test job

Bug

  • Related issues linked using fixes #number
  • Integration tests added

Feature

  • Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
  • Related issues linked using fixes #number
  • Integration tests added
  • Documentation added
  • Telemetry added. In case of a feature if it's used or not.

Documentation / Examples

  • Make sure the linting passes

@ijjk
Copy link
Member Author

ijjk commented May 24, 2021

Failing test suites

Commit: d043560

test/integration/externals/test/index.test.js

  • Valid resolve alias > should render the static page
  • Valid resolve alias > should render the ssr page
  • Valid resolve alias > should render the ssg page
Expand output

● Valid resolve alias › should render the static page

command failed with code 1

  147 |         code !== 0
  148 |       ) {
> 149 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  150 |       }
  151 |
  152 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:149:23)

● Valid resolve alias › should render the ssr page

command failed with code 1

  147 |         code !== 0
  148 |       ) {
> 149 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  150 |       }
  151 |
  152 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:149:23)

● Valid resolve alias › should render the ssg page

command failed with code 1

  147 |         code !== 0
  148 |       ) {
> 149 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  150 |       }
  151 |
  152 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:149:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  293 | export async function killApp(instance) {
  294 |   await new Promise((resolve, reject) => {
> 295 |     treeKill(instance.pid, (err) => {
      |                       ^
  296 |       if (err) {
  297 |         if (
  298 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:295:23
  at killApp (lib/next-test-utils.js:294:9)
  at integration/externals/test/index.test.js:25:18

test/integration/build-output/test/index.test.js

  • Build Output > Basic Application Output > should not deviate from snapshot
  • Build Output > Basic Application Output (with experimental.gzipSize: false) > should not deviate from snapshot
  • Build Output > Basic Application Output (with experimental.gzipSize: true) > should not deviate from snapshot
Expand output

● Build Output › Basic Application Output (with experimental.gzipSize: true) › should not deviate from snapshot

expect(received).toBeCloseTo(expected, precision)

Expected: 63.6
Received: 64.6

Expected precision:    1
Expected difference: < 0.05
Received difference:   0.9999999999999929

  124 |           expect(indexSize.endsWith('B')).toBe(true)
  125 |
> 126 |           expect(parseFloat(indexFirstLoad)).toBeCloseTo(gz ? 63.6 : 195, 1)
      |                                              ^
  127 |           expect(indexFirstLoad.endsWith('kB')).toBe(true)
  128 |
  129 |           expect(parseFloat(err404Size)).toBeCloseTo(gz ? 3.06 : 8.15, 1)

  at Object.<anonymous> (integration/build-output/test/index.test.js:126:46)

● Build Output › Basic Application Output (with experimental.gzipSize: false) › should not deviate from snapshot

expect(received).toBeCloseTo(expected, precision)

Expected: 0.394
Received: 0.408

Expected precision:    2
Expected difference: < 0.005
Received difference:   0.013999999999999957

  118 |           const gz = gzipSize !== false
  119 |
> 120 |           expect(parseFloat(indexSize) / 1000).toBeCloseTo(
      |                                                ^
  121 |             gz ? 0.251 : 0.394,
  122 |             2
  123 |           )

  at Object.<anonymous> (integration/build-output/test/index.test.js:120:48)

● Build Output › Basic Application Output › should not deviate from snapshot

expect(received).toBeCloseTo(expected, precision)

Expected: 63.6
Received: 64.6

Expected precision:    1
Expected difference: < 0.05
Received difference:   0.9999999999999929

  124 |           expect(indexSize.endsWith('B')).toBe(true)
  125 |
> 126 |           expect(parseFloat(indexFirstLoad)).toBeCloseTo(gz ? 63.6 : 195, 1)
      |                                              ^
  127 |           expect(indexFirstLoad.endsWith('kB')).toBe(true)
  128 |
  129 |           expect(parseFloat(err404Size)).toBeCloseTo(gz ? 3.06 : 8.15, 1)

  at Object.<anonymous> (integration/build-output/test/index.test.js:126:46)

test/integration/css-features/test/index.test.js

  • CSS Modules: Importing Invalid Global CSS > should fail to build
Expand output

● CSS Modules: Importing Invalid Global CSS › should fail to build

expect(received).toContain(expected) // indexOf

Expected substring: "pages/styles.css"
Received string:    "Failed to compile.·
./pages/styles.module.css
Error: Syntax error: Selector \"a\" is not pure (pure selectors must contain at least one local class or id)·
> 1 | a {
    |   ^
  2 |   all: initial;
  3 | }
    at runMicrotasks (<anonymous>)
    at async Promise.all (index 0)··
> Build error occurred
Error: > Build failed because of webpack errors

  15 | if(clientResult.errors.length>0){result={warnings:[...clientResult.warnings],errors:[...clientResult.errors]};}else{const serverResult=await(0,_compiler.runCompiler)(configs[1]);result={warnings:[...clientResult.warnings,...serverResult.warnings],errors:[...clientResult.errors,...serverResult.errors]};}});}else{result=await nextBuildSpan.traceChild('run-webpack-compiler').traceAsyncFn(()=>(0,_compiler.runCompiler)(configs));}const webpackBuildEnd=process.hrtime(webpackBuildStart);if(buildSpinner){buildSpinner.stopAndPersist();}result=nextBuildSpan.traceChild('format-webpack-messages').traceFn(()=>(0,_formatWebpackMessages.default)(result));if(result.errors.length>0){// Only keep the first error. Others are often indicative
  16 | // of the same problem, but confuse the reader with noise.
> 17 | if(result.errors.length>1){result.errors.length=1;}const error=result.errors.join('\n\n');console.error(_chalk.default.red('Failed to compile.\n'));if(error.indexOf('private-next-pages')>-1&&error.indexOf('does not contain a default export')>-1){const page_name_regex=/*#__PURE__*/_wrapRegExp(/'private\x2Dnext\x2Dpages\/((?:(?!')[\s\S])*)'/,{page_name:1});const parsed=page_name_regex.exec(error);const page_name=parsed&&parsed.groups&&parsed.groups.page_name;throw new Error(`webpack build failed: found page without a React Component as default export in pages/${page_name}\n\nSee https://nextjs.org/docs/messages/page-without-valid-component for more info.`);}console.error(error);console.error();if(error.indexOf('private-next-pages')>-1||error.indexOf('__next_polyfill__')>-1){throw new Error('> webpack config.resolve.alias was incorrectly overridden. https://nextjs.org/docs/messages/invalid-resolve-alias');}throw new Error('> Build failed because of webpack errors');}else{telemetry.record((0,_events.eventBuildCompleted)(pagePaths,{durationInSeconds:webpackBuildEnd[0]}));if(result.warnings.length>0){Log.warn('Compiled with warnings\n');console.warn(result.warnings.join('\n\n'));console.warn();}else{Log.info('Compiled successfully');}}const postCompileSpinner=(0,_spinner.default)({prefixText:`${Log.prefixes.info} Collecting page data`});const buildManifestPath=_path.default.join(distDir,_constants2.BUILD_MANIFEST);const ssgPages=new Set();const ssgStaticFallbackPages=new Set();const ssgBlockingFallbackPages=new Set();const staticPages=new Set();const invalidPages=new Set();const hybridAmpPages=new Set();const serverPropsPages=new Set();const additionalSsgPaths=new Map();const additionalSsgPathsEncoded=new Map();const pageInfos=new Map();const pagesManifest=JSON.parse(await _fs.promises.readFile(manifestPath,'utf8'));const buildManifest=JSON.parse(await _fs.promises.readFile(buildManifestPath,'utf8'));const analysisBegin=process.hrtime();const staticCheckSpan=nextBuildSpan.traceChild('static-check');const{customAppGetInitialProps,namedExports,isNextImageImported,hasSsrAmpPages,hasNonStaticErrorPage}=await staticCheckSpan.traceAsyncFn(async()=>{process.env.NEXT_PHASE=_constants2.PHASE_PRODUCTION_BUILD;const staticCheckWorkers=new _jestWorker.Worker(staticCheckWorker,{numWorkers:config.experimental.cpus,enableWorkerThreads:config.experimental.workerThreads});staticCheckWorkers.getStdout().pipe(process.stdout);staticCheckWorkers.getStderr().pipe(process.stderr);const runtimeEnvConfig={publicRuntimeConfig:config.publicRuntimeConfig,serverRuntimeConfig:config.serverRuntimeConfig};const nonStaticErrorPageSpan=staticCheckSpan.traceChild('check-static-error-page');const nonStaticErrorPagePromise=nonStaticErrorPageSpan.traceAsyncFn(async()=>hasCustomErrorPage&&(await staticCheckWorkers.hasCustomGetInitialProps('/_error',distDir,isLikeServerless,runtimeEnvConfig,false)));// we don't output _app in serverless mode so use _app export
     |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ^
  18 | // from _error instead
  19 | const appPageToCheck=isLikeServerless?'/_error':'/_app';const customAppGetInitialPropsPromise=staticCheckWorkers.hasCustomGetInitialProps(appPageToCheck,distDir,isLikeServerless,runtimeEnvConfig,true);const namedExportsPromise=staticCheckWorkers.getNamedExports(appPageToCheck,distDir,isLikeServerless,runtimeEnvConfig);// eslint-disable-next-line no-shadow
  20 | let isNextImageImported;// eslint-disable-next-line no-shadow

  at ../packages/next/dist/build/index.js:17:924
  at async Span.traceAsyncFn (../packages/next/dist/telemetry/trace/trace.js:6:584)
  "
  at Object.<anonymous> (integration/css-features/test/index.test.js:220:20)

@ijjk
Copy link
Member Author

ijjk commented May 24, 2021

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
buildDuration 13.5s 13.8s ⚠️ +296ms
buildDurationCached 3.8s 3.9s ⚠️ +73ms
nodeModulesSize 46.7 MB 46.7 MB ⚠️ +416 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
/ failed reqs 0 0
/ total time (seconds) 2.391 2.808 ⚠️ +0.42
/ avg req/sec 1045.56 890.3 ⚠️ -155.26
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.26 1.339 ⚠️ +0.08
/error-in-render avg req/sec 1984.23 1867.24 ⚠️ -116.99
Client Bundles (main, webpack, commons)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
framework-HASH.js gzip 39.3 kB 39.3 kB
main-HASH.js gzip 19.4 kB 19.4 kB
webpack-HASH.js gzip 994 B 994 B
Overall change 59.7 kB 59.7 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
polyfills-HASH.js gzip 31.1 kB 31.1 kB
Overall change 31.1 kB 31.1 kB
Client Pages
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_app-HASH.js gzip 1.02 kB 1.02 kB
_error-HASH.js gzip 3.06 kB 3.06 kB
amp-HASH.js gzip 526 B 526 B
css-HASH.js gzip 334 B 334 B
hooks-HASH.js gzip 890 B 890 B
index-HASH.js gzip 262 B 262 B
link-HASH.js gzip 1.65 kB 1.65 kB
routerDirect..HASH.js gzip 331 B 331 B
withRouter-HASH.js gzip 329 B 329 B
bb14e60e810b..30f.css gzip 125 B 125 B
Overall change 8.54 kB 8.54 kB
Client Build Manifests
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_buildManifest.js gzip 390 B 390 B
Overall change 390 B 390 B
Rendered Page Sizes
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
index.html gzip 561 B 561 B
link.html gzip 569 B 569 B
withRouter.html gzip 556 B 556 B
Overall change 1.69 kB 1.69 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
buildDuration 15.9s 15.9s ⚠️ +58ms
buildDurationCached 5.2s 4.9s -292ms
nodeModulesSize 46.7 MB 46.7 MB ⚠️ +416 B
Client Bundles (main, webpack, commons)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
framework-HASH.js gzip 39.3 kB 39.3 kB
main-HASH.js gzip 19.4 kB 19.4 kB
webpack-HASH.js gzip 994 B 994 B
Overall change 59.7 kB 59.7 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
polyfills-HASH.js gzip 31.1 kB 31.1 kB
Overall change 31.1 kB 31.1 kB
Client Pages
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_app-HASH.js gzip 1.02 kB 1.02 kB
_error-HASH.js gzip 3.06 kB 3.06 kB
amp-HASH.js gzip 526 B 526 B
css-HASH.js gzip 334 B 334 B
hooks-HASH.js gzip 890 B 890 B
index-HASH.js gzip 262 B 262 B
link-HASH.js gzip 1.65 kB 1.65 kB
routerDirect..HASH.js gzip 331 B 331 B
withRouter-HASH.js gzip 329 B 329 B
bb14e60e810b..30f.css gzip 125 B 125 B
Overall change 8.54 kB 8.54 kB
Client Build Manifests
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_buildManifest.js gzip 390 B 390 B
Overall change 390 B 390 B
Serverless bundles
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_error.js 16.9 kB 16.9 kB
404.html 2.42 kB 2.42 kB
500.html 2.41 kB 2.41 kB
amp.amp.html 10.8 kB 10.8 kB
amp.html 1.61 kB 1.61 kB
css.html 1.79 kB 1.79 kB
hooks.html 1.67 kB 1.67 kB
index.js 17.2 kB 17.2 kB
link.js 17.4 kB 17.4 kB
routerDirect.js 17.4 kB 17.4 kB
withRouter.js 17.4 kB 17.4 kB
Overall change 107 kB 107 kB

Webpack 4 Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
buildDuration 12.4s 12.4s ⚠️ +2ms
buildDurationCached 5.4s 5.4s -13ms
nodeModulesSize 46.7 MB 46.7 MB ⚠️ +416 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
/ failed reqs 0 0
/ total time (seconds) 2.443 2.532 ⚠️ +0.09
/ avg req/sec 1023.43 987.24 ⚠️ -36.19
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.247 1.33 ⚠️ +0.08
/error-in-render avg req/sec 2005.56 1879.89 ⚠️ -125.67
Client Bundles (main, webpack, commons)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
677f882d2ed8..HASH.js gzip 13.3 kB 13.3 kB
framework.HASH.js gzip 39 kB 39 kB
main-HASH.js gzip 7.25 kB 7.25 kB
webpack-HASH.js gzip 751 B 751 B
Overall change 60.3 kB 60.3 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
polyfills-HASH.js gzip 31.3 kB 31.3 kB
Overall change 31.3 kB 31.3 kB
Client Pages
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_app-HASH.js gzip 1.28 kB 1.28 kB
_error-HASH.js gzip 3.74 kB 3.74 kB
amp-HASH.js gzip 536 B 536 B
css-HASH.js gzip 339 B 339 B
hooks-HASH.js gzip 887 B 887 B
index-HASH.js gzip 227 B 227 B
link-HASH.js gzip 1.64 kB 1.64 kB
routerDirect..HASH.js gzip 303 B 303 B
withRouter-HASH.js gzip 302 B 302 B
e025d2764813..52f.css gzip 125 B 125 B
Overall change 9.38 kB 9.38 kB
Client Build Manifests
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
_buildManifest.js gzip 420 B 420 B
Overall change 420 B 420 B
Rendered Page Sizes
vercel/next.js canary ijjk/next.js test/force-webpack4-testing Change
index.html gzip 614 B 614 B
link.html gzip 620 B 620 B
withRouter.html gzip 606 B 606 B
Overall change 1.84 kB 1.84 kB
Commit: d043560

@ijjk
Copy link
Member Author

ijjk commented Jun 3, 2021

Closing in favor of #25639

@ijjk ijjk closed this Jun 3, 2021
@ijjk ijjk deleted the test/force-webpack4-testing branch June 3, 2021 16:04
@vercel vercel locked as resolved and limited conversation to collaborators Jan 28, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant