Skip to content

Commit 87f3215

Browse files
authoredFeb 26, 2024
fix: try to resolve styled-jsx from next context, not serverHandlerContext (#300)
* test: add yarn3 monorepo with pnpm linker smoke test * fix: try to resolve styled-jsx from next context, not serverHandlerContext
1 parent 6255c5f commit 87f3215

File tree

13 files changed

+469
-18
lines changed

13 files changed

+469
-18
lines changed
 

‎.github/actions/pnpm/action.yaml

+3-11
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,9 @@ description: Setup PNPM with Node.js and caching of the workspace
33
runs:
44
using: 'composite'
55
steps:
6-
- name: Install Node.js
7-
uses: actions/setup-node@v4
8-
with:
9-
node-version: 18
10-
11-
- uses: pnpm/action-setup@v2
12-
name: Install PNPM
13-
id: pnpm-install
14-
with:
15-
version: 8
16-
run_install: false
6+
- name: setup pnpm/yarn
7+
run: corepack enable
8+
shell: bash
179

1810
- name: Get pnpm store directory
1911
id: pnpm-cache

‎src/build/content/server.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ export const copyNextDependencies = async (ctx: PluginContext): Promise<void> =>
155155
// detect if it might lead to a runtime issue and throw an error upfront on build time instead of silently failing during runtime
156156
const require = createRequire(ctx.serverHandlerDir)
157157
try {
158-
require.resolve('styled-jsx')
159-
require.resolve('next')
158+
const nextEntryAbsolutePath = require.resolve('next')
159+
const nextRequire = createRequire(nextEntryAbsolutePath)
160+
nextRequire.resolve('styled-jsx')
160161
} catch {
161162
throw new Error(
162163
'node_modules are not installed correctly, if you are using pnpm please set the public hoist pattern to: `public-hoist-pattern[]=*`.\n' +

‎tests/e2e/smoke.test.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Page, expect } from '@playwright/test'
2+
import { test, Fixture } from '../utils/create-e2e-fixture.js'
3+
4+
// those tests have different fixtures and can run in parallel
5+
test.describe.configure({ mode: 'parallel' })
6+
7+
async function smokeTest(page: Page, fixture: Fixture) {
8+
const response = await page.goto(fixture.url)
9+
10+
expect(response?.status()).toBe(200)
11+
12+
const smokeContent = await page.textContent('[data-testid="smoke"]')
13+
await expect(smokeContent).toBe('SSR: yes')
14+
}
15+
16+
test('yarn@3 monorepo with pnpm linker', async ({ page, yarnMonorepoWithPnpmLinker }) => {
17+
await smokeTest(page, yarnMonorepoWithPnpmLinker)
18+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# Dependencies
4+
node_modules
5+
.pnp
6+
.pnp.js
7+
.yarn
8+
9+
# Local env files
10+
.env
11+
.env.local
12+
.env.development.local
13+
.env.test.local
14+
.env.production.local
15+
16+
# Testing
17+
coverage
18+
19+
# Turbo
20+
.turbo
21+
22+
# Vercel
23+
.vercel
24+
25+
# Build Outputs
26+
.next/
27+
out/
28+
build
29+
dist
30+
31+
32+
# Debug
33+
npm-debug.log*
34+
yarn-debug.log*
35+
yarn-error.log*
36+
37+
# Misc
38+
.DS_Store
39+
*.pem
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nodeLinker: pnpm
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/** @type {import('next').NextConfig} */
2+
const nextConfig = {
3+
output: 'standalone',
4+
eslint: {
5+
ignoreDuringBuilds: true,
6+
},
7+
transpilePackages: ['@repo/ui'],
8+
}
9+
10+
module.exports = nextConfig
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "@apps/site",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"dev": "next dev",
7+
"build": "next build"
8+
},
9+
"dependencies": {
10+
"@packages/ui": "*",
11+
"next": "^14.0.3",
12+
"react": "^18.2.0",
13+
"react-dom": "^18.2.0"
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { TestElement } from '@packages/ui/test.jsx'
2+
3+
export default function Home({ ssr }) {
4+
return (
5+
<main>
6+
<TestElement testid="smoke">SSR: {ssr ? 'yes' : 'no'}</TestElement>
7+
</main>
8+
)
9+
}
10+
11+
export const getServerSideProps = async () => {
12+
return {
13+
props: {
14+
ssr: true,
15+
},
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "yarn-monorepo-with-pnpm-linker",
3+
"private": true,
4+
"scripts": {
5+
"build": "yarn workspace @apps/site build"
6+
},
7+
"engines": {
8+
"node": ">=18"
9+
},
10+
"packageManager": "yarn@3.2.4",
11+
"workspaces": [
12+
"apps/*",
13+
"packages/*"
14+
]
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "@packages/ui",
3+
"version": "0.0.0",
4+
"private": true,
5+
"exports": {
6+
"./test.jsx": "./src/test.jsx"
7+
},
8+
"devDependencies": {
9+
"react": "^18.2.0"
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
'use client'
2+
3+
export const TestElement = ({ children, testid }) => {
4+
return <div data-testid={testid}>{children}</div>
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
# This file is generated by running "yarn install" inside your project.
2+
# Manual changes might be lost - proceed with caution!
3+
4+
__metadata:
5+
version: 6
6+
cacheKey: 8
7+
8+
"@apps/site@workspace:apps/site":
9+
version: 0.0.0-use.local
10+
resolution: "@apps/site@workspace:apps/site"
11+
dependencies:
12+
"@packages/ui": "*"
13+
next: ^14.0.3
14+
react: ^18.2.0
15+
react-dom: ^18.2.0
16+
languageName: unknown
17+
linkType: soft
18+
19+
"@next/env@npm:14.1.0":
20+
version: 14.1.0
21+
resolution: "@next/env@npm:14.1.0"
22+
checksum: ecec03a3e9745996ed1c7fc218fc9a1a4345a0cf368afb50f38a3b6fbf6f966a36dba174c90b5f90b568188dbd0eba48a2c5448b6742298417df4ff3351c6d40
23+
languageName: node
24+
linkType: hard
25+
26+
"@next/swc-darwin-arm64@npm:14.1.0":
27+
version: 14.1.0
28+
resolution: "@next/swc-darwin-arm64@npm:14.1.0"
29+
conditions: os=darwin & cpu=arm64
30+
languageName: node
31+
linkType: hard
32+
33+
"@next/swc-darwin-x64@npm:14.1.0":
34+
version: 14.1.0
35+
resolution: "@next/swc-darwin-x64@npm:14.1.0"
36+
conditions: os=darwin & cpu=x64
37+
languageName: node
38+
linkType: hard
39+
40+
"@next/swc-linux-arm64-gnu@npm:14.1.0":
41+
version: 14.1.0
42+
resolution: "@next/swc-linux-arm64-gnu@npm:14.1.0"
43+
conditions: os=linux & cpu=arm64 & libc=glibc
44+
languageName: node
45+
linkType: hard
46+
47+
"@next/swc-linux-arm64-musl@npm:14.1.0":
48+
version: 14.1.0
49+
resolution: "@next/swc-linux-arm64-musl@npm:14.1.0"
50+
conditions: os=linux & cpu=arm64 & libc=musl
51+
languageName: node
52+
linkType: hard
53+
54+
"@next/swc-linux-x64-gnu@npm:14.1.0":
55+
version: 14.1.0
56+
resolution: "@next/swc-linux-x64-gnu@npm:14.1.0"
57+
conditions: os=linux & cpu=x64 & libc=glibc
58+
languageName: node
59+
linkType: hard
60+
61+
"@next/swc-linux-x64-musl@npm:14.1.0":
62+
version: 14.1.0
63+
resolution: "@next/swc-linux-x64-musl@npm:14.1.0"
64+
conditions: os=linux & cpu=x64 & libc=musl
65+
languageName: node
66+
linkType: hard
67+
68+
"@next/swc-win32-arm64-msvc@npm:14.1.0":
69+
version: 14.1.0
70+
resolution: "@next/swc-win32-arm64-msvc@npm:14.1.0"
71+
conditions: os=win32 & cpu=arm64
72+
languageName: node
73+
linkType: hard
74+
75+
"@next/swc-win32-ia32-msvc@npm:14.1.0":
76+
version: 14.1.0
77+
resolution: "@next/swc-win32-ia32-msvc@npm:14.1.0"
78+
conditions: os=win32 & cpu=ia32
79+
languageName: node
80+
linkType: hard
81+
82+
"@next/swc-win32-x64-msvc@npm:14.1.0":
83+
version: 14.1.0
84+
resolution: "@next/swc-win32-x64-msvc@npm:14.1.0"
85+
conditions: os=win32 & cpu=x64
86+
languageName: node
87+
linkType: hard
88+
89+
"@packages/ui@*, @packages/ui@workspace:packages/ui":
90+
version: 0.0.0-use.local
91+
resolution: "@packages/ui@workspace:packages/ui"
92+
dependencies:
93+
react: ^18.2.0
94+
languageName: unknown
95+
linkType: soft
96+
97+
"@swc/helpers@npm:0.5.2":
98+
version: 0.5.2
99+
resolution: "@swc/helpers@npm:0.5.2"
100+
dependencies:
101+
tslib: ^2.4.0
102+
checksum: 51d7e3d8bd56818c49d6bfbd715f0dbeedc13cf723af41166e45c03e37f109336bbcb57a1f2020f4015957721aeb21e1a7fff281233d797ff7d3dd1f447fa258
103+
languageName: node
104+
linkType: hard
105+
106+
"busboy@npm:1.6.0":
107+
version: 1.6.0
108+
resolution: "busboy@npm:1.6.0"
109+
dependencies:
110+
streamsearch: ^1.1.0
111+
checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e
112+
languageName: node
113+
linkType: hard
114+
115+
"caniuse-lite@npm:^1.0.30001579":
116+
version: 1.0.30001589
117+
resolution: "caniuse-lite@npm:1.0.30001589"
118+
checksum: 7a6e6c4fb14c2bd0103a8f744bdd8701c1a5f19162f4a7600b89e25bc86d689f82204dc135f3a1dcd1a53050caa04fd0bb39b7df88698a6b90f189ec48900689
119+
languageName: node
120+
linkType: hard
121+
122+
"client-only@npm:0.0.1":
123+
version: 0.0.1
124+
resolution: "client-only@npm:0.0.1"
125+
checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8
126+
languageName: node
127+
linkType: hard
128+
129+
"graceful-fs@npm:^4.2.11":
130+
version: 4.2.11
131+
resolution: "graceful-fs@npm:4.2.11"
132+
checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
133+
languageName: node
134+
linkType: hard
135+
136+
"js-tokens@npm:^3.0.0 || ^4.0.0":
137+
version: 4.0.0
138+
resolution: "js-tokens@npm:4.0.0"
139+
checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78
140+
languageName: node
141+
linkType: hard
142+
143+
"loose-envify@npm:^1.1.0":
144+
version: 1.4.0
145+
resolution: "loose-envify@npm:1.4.0"
146+
dependencies:
147+
js-tokens: ^3.0.0 || ^4.0.0
148+
bin:
149+
loose-envify: cli.js
150+
checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4
151+
languageName: node
152+
linkType: hard
153+
154+
"nanoid@npm:^3.3.6":
155+
version: 3.3.7
156+
resolution: "nanoid@npm:3.3.7"
157+
bin:
158+
nanoid: bin/nanoid.cjs
159+
checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2
160+
languageName: node
161+
linkType: hard
162+
163+
"next@npm:^14.0.3":
164+
version: 14.1.0
165+
resolution: "next@npm:14.1.0"
166+
dependencies:
167+
"@next/env": 14.1.0
168+
"@next/swc-darwin-arm64": 14.1.0
169+
"@next/swc-darwin-x64": 14.1.0
170+
"@next/swc-linux-arm64-gnu": 14.1.0
171+
"@next/swc-linux-arm64-musl": 14.1.0
172+
"@next/swc-linux-x64-gnu": 14.1.0
173+
"@next/swc-linux-x64-musl": 14.1.0
174+
"@next/swc-win32-arm64-msvc": 14.1.0
175+
"@next/swc-win32-ia32-msvc": 14.1.0
176+
"@next/swc-win32-x64-msvc": 14.1.0
177+
"@swc/helpers": 0.5.2
178+
busboy: 1.6.0
179+
caniuse-lite: ^1.0.30001579
180+
graceful-fs: ^4.2.11
181+
postcss: 8.4.31
182+
styled-jsx: 5.1.1
183+
peerDependencies:
184+
"@opentelemetry/api": ^1.1.0
185+
react: ^18.2.0
186+
react-dom: ^18.2.0
187+
sass: ^1.3.0
188+
dependenciesMeta:
189+
"@next/swc-darwin-arm64":
190+
optional: true
191+
"@next/swc-darwin-x64":
192+
optional: true
193+
"@next/swc-linux-arm64-gnu":
194+
optional: true
195+
"@next/swc-linux-arm64-musl":
196+
optional: true
197+
"@next/swc-linux-x64-gnu":
198+
optional: true
199+
"@next/swc-linux-x64-musl":
200+
optional: true
201+
"@next/swc-win32-arm64-msvc":
202+
optional: true
203+
"@next/swc-win32-ia32-msvc":
204+
optional: true
205+
"@next/swc-win32-x64-msvc":
206+
optional: true
207+
peerDependenciesMeta:
208+
"@opentelemetry/api":
209+
optional: true
210+
sass:
211+
optional: true
212+
bin:
213+
next: dist/bin/next
214+
checksum: 077fd76a6fe7127a8be3d11035dcefb2c829f304aaa85144e0d1b531a1549b6c9bb99459af1ef0782c1f1110ca08f6f33efd293a2dc51672dd9dc45ede608ecf
215+
languageName: node
216+
linkType: hard
217+
218+
"picocolors@npm:^1.0.0":
219+
version: 1.0.0
220+
resolution: "picocolors@npm:1.0.0"
221+
checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981
222+
languageName: node
223+
linkType: hard
224+
225+
"postcss@npm:8.4.31":
226+
version: 8.4.31
227+
resolution: "postcss@npm:8.4.31"
228+
dependencies:
229+
nanoid: ^3.3.6
230+
picocolors: ^1.0.0
231+
source-map-js: ^1.0.2
232+
checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
233+
languageName: node
234+
linkType: hard
235+
236+
"react-dom@npm:^18.2.0":
237+
version: 18.2.0
238+
resolution: "react-dom@npm:18.2.0"
239+
dependencies:
240+
loose-envify: ^1.1.0
241+
scheduler: ^0.23.0
242+
peerDependencies:
243+
react: ^18.2.0
244+
checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc
245+
languageName: node
246+
linkType: hard
247+
248+
"react@npm:^18.2.0":
249+
version: 18.2.0
250+
resolution: "react@npm:18.2.0"
251+
dependencies:
252+
loose-envify: ^1.1.0
253+
checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b
254+
languageName: node
255+
linkType: hard
256+
257+
"scheduler@npm:^0.23.0":
258+
version: 0.23.0
259+
resolution: "scheduler@npm:0.23.0"
260+
dependencies:
261+
loose-envify: ^1.1.0
262+
checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a
263+
languageName: node
264+
linkType: hard
265+
266+
"source-map-js@npm:^1.0.2":
267+
version: 1.0.2
268+
resolution: "source-map-js@npm:1.0.2"
269+
checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
270+
languageName: node
271+
linkType: hard
272+
273+
"streamsearch@npm:^1.1.0":
274+
version: 1.1.0
275+
resolution: "streamsearch@npm:1.1.0"
276+
checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942
277+
languageName: node
278+
linkType: hard
279+
280+
"styled-jsx@npm:5.1.1":
281+
version: 5.1.1
282+
resolution: "styled-jsx@npm:5.1.1"
283+
dependencies:
284+
client-only: 0.0.1
285+
peerDependencies:
286+
react: ">= 16.8.0 || 17.x.x || ^18.0.0-0"
287+
peerDependenciesMeta:
288+
"@babel/core":
289+
optional: true
290+
babel-plugin-macros:
291+
optional: true
292+
checksum: 523a33b38603492547e861b98e29c873939b04e15fbe5ef16132c6f1e15958126647983c7d4675325038b428a5e91183d996e90141b18bdd1bbadf6e2c45b2fa
293+
languageName: node
294+
linkType: hard
295+
296+
"tslib@npm:^2.4.0":
297+
version: 2.6.2
298+
resolution: "tslib@npm:2.6.2"
299+
checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad
300+
languageName: node
301+
linkType: hard
302+
303+
"yarn-monorepo-with-pnpm-linker@workspace:.":
304+
version: 0.0.0-use.local
305+
resolution: "yarn-monorepo-with-pnpm-linker@workspace:."
306+
languageName: unknown
307+
linkType: soft

‎tests/utils/create-e2e-fixture.ts

+25-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export interface DeployResult {
2121
logs: string
2222
}
2323

24-
type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun'
24+
type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'berry'
2525

2626
/**
2727
* Copies a fixture to a temp folder on the system and runs the tests inside.
@@ -34,6 +34,7 @@ export const createE2EFixture = async (
3434
packagePath?: string
3535
buildCommand?: string
3636
publishDirectory?: string
37+
smoke?: boolean
3738
} = {},
3839
) => {
3940
const cwd = await mkdtemp(join(tmpdir(), 'netlify-next-runtime-'))
@@ -58,7 +59,7 @@ export const createE2EFixture = async (
5859
try {
5960
const [packageName] = await Promise.all([
6061
buildAndPackRuntime({ ...config, dest: cwd }),
61-
copyFixture(fixture, cwd),
62+
copyFixture(fixture, cwd, config),
6263
])
6364
await installRuntime(packageName, cwd, config.packageManger || 'npm', config.packagePath)
6465
const result = await deploySite(cwd, config.packagePath)
@@ -75,9 +76,15 @@ export const createE2EFixture = async (
7576
export type Fixture = Awaited<ReturnType<typeof createE2EFixture>>
7677

7778
/** Copies a fixture folder to a destination */
78-
async function copyFixture(fixtureName: string, dest: string): Promise<void> {
79+
async function copyFixture(
80+
fixtureName: string,
81+
dest: string,
82+
config: Parameters<typeof createE2EFixture>[1],
83+
): Promise<void> {
7984
console.log(`📂 Copying fixture to '${dest}'...`)
80-
const src = fileURLToPath(new URL(`../fixtures/${fixtureName}`, import.meta.url))
85+
const src = fileURLToPath(
86+
new URL(`../${config?.smoke ? `smoke-fixtures` : `fixtures`}/${fixtureName}`, import.meta.url),
87+
)
8188
const files = await fg.glob('**/*', {
8289
ignore: ['node_modules'],
8390
dot: true,
@@ -141,11 +148,16 @@ async function installRuntime(
141148
}
142149

143150
let command: string = `npm install --ignore-scripts --no-audit ${packageName}`
151+
let env = {} as NodeJS.ProcessEnv
144152

145153
switch (packageManger) {
146154
case 'yarn':
147155
command = `yarn add file:${join(cwd, packageName)} --ignore-scripts`
148156
break
157+
case 'berry':
158+
command = `yarn add ${join(cwd, packageName)}`
159+
env['YARN_ENABLE_SCRIPTS'] = 'false'
160+
break
149161
case 'pnpm':
150162
command = `pnpm add file:${join(cwd, packageName)} ${filter} --ignore-scripts`
151163
break
@@ -158,7 +170,7 @@ async function installRuntime(
158170
await rm(join(cwd, 'package-lock.json'), { force: true })
159171
}
160172

161-
await execaCommand(command, { cwd })
173+
await execaCommand(command, { cwd, env })
162174
}
163175

164176
async function deploySite(cwd: string, packagePath?: string): Promise<DeployResult> {
@@ -228,6 +240,7 @@ export const test = base.extend<
228240
turborepo: Fixture
229241
turborepoNPM: Fixture
230242
serverComponents: Fixture
243+
yarnMonorepoWithPnpmLinker: Fixture
231244
}
232245
>({
233246
simpleNextApp: makeE2EFixture('simple-next-app'),
@@ -263,6 +276,13 @@ export const test = base.extend<
263276
buildCommand: 'nx run custom-dist-dir:build',
264277
publishDirectory: 'dist/apps/custom-dist-dir/dist',
265278
}),
279+
yarnMonorepoWithPnpmLinker: makeE2EFixture('yarn-monorepo-with-pnpm-linker', {
280+
packageManger: 'berry',
281+
packagePath: 'apps/site',
282+
buildCommand: 'yarn build',
283+
publishDirectory: 'apps/site/.next',
284+
smoke: true,
285+
}),
266286
takeScreenshot: [
267287
async ({ page }, use, testInfo) => {
268288
await use()

0 commit comments

Comments
 (0)
Please sign in to comment.