Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
184 lines
5.2 KiB
JavaScript
184 lines
5.2 KiB
JavaScript
import { config } from 'dotenv'
|
|
|
|
import execa from 'execa'
|
|
import path from 'path'
|
|
import url from 'url'
|
|
import { generatePackageJson } from './generate-package-json.js'
|
|
import { Listr } from 'listr2'
|
|
import { forceCrash } from './bench.js'
|
|
import { red } from '../../packages/next/dist/lib/picocolors.js'
|
|
import { resetProject } from '../../scripts/reset-project.mjs'
|
|
|
|
config()
|
|
|
|
export const TEST_PROJECT_NAME = process.env.VERCEL_TEST_PROJECT_NAME
|
|
const ORIGIN_PROJECT_NAME = TEST_PROJECT_NAME + '-origin'
|
|
const HEAD_PROJECT_NAME = TEST_PROJECT_NAME + '-head'
|
|
|
|
const TEST_TEAM_NAME = process.env.VERCEL_TEST_TEAM
|
|
const TEST_TOKEN = process.env.VERCEL_TEST_TOKEN
|
|
const VERCEL_EDGE_FUNCTIONS_BRIDGE_PKG =
|
|
process.env.VERCEL_EDGE_FUNCTIONS_BRIDGE_PKG
|
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
|
|
|
const appFolder = path.join(__dirname, 'benchmark-app')
|
|
const originAppFolder = path.join(__dirname, 'benchmark-app-origin')
|
|
const headAppFolder = path.join(__dirname, 'benchmark-app-head')
|
|
|
|
export async function generateProjects() {
|
|
const { originUrl, headUrl } = await new Listr(
|
|
[
|
|
{
|
|
title: 'Origin project',
|
|
task: (ctx, task) =>
|
|
task.newListr(
|
|
(parent) => [
|
|
{
|
|
title: 'Resetting project',
|
|
task: async () => {
|
|
await resetProject({
|
|
teamId: TEST_TEAM_NAME,
|
|
projectName: ORIGIN_PROJECT_NAME,
|
|
disableDeploymentProtection: true,
|
|
})
|
|
},
|
|
},
|
|
{
|
|
title: 'copying app',
|
|
task: async () => {
|
|
await execa('cp', ['-f', '-R', appFolder, originAppFolder])
|
|
},
|
|
},
|
|
{
|
|
title: 'Set Next.js version in package.json',
|
|
task: async () => {
|
|
await generatePackageJson(originAppFolder)
|
|
},
|
|
},
|
|
{
|
|
title: 'deploying project',
|
|
task: async () => {
|
|
const url = await deployProject(
|
|
ORIGIN_PROJECT_NAME,
|
|
originAppFolder
|
|
)
|
|
ctx.originUrl = url
|
|
},
|
|
},
|
|
],
|
|
{ concurrent: false }
|
|
),
|
|
},
|
|
{
|
|
title: 'Head project',
|
|
task: (ctx, task) =>
|
|
task.newListr(
|
|
(parent) => [
|
|
{
|
|
title: 'Resetting project',
|
|
task: async () => {
|
|
await resetProject({
|
|
teamId: TEST_TEAM_NAME,
|
|
projectName: HEAD_PROJECT_NAME,
|
|
disableDeploymentProtection: true,
|
|
})
|
|
},
|
|
},
|
|
{
|
|
title: 'copying app',
|
|
task: async () => {
|
|
await execa('cp', ['-f', '-R', appFolder, headAppFolder])
|
|
},
|
|
},
|
|
{
|
|
title: 'pack local Next.js version',
|
|
task: async () => {
|
|
await generatePackageJson(headAppFolder, true)
|
|
},
|
|
},
|
|
{
|
|
title: 'deploying project',
|
|
task: async () => {
|
|
const url = await deployProject(
|
|
HEAD_PROJECT_NAME,
|
|
headAppFolder
|
|
)
|
|
ctx.headUrl = url
|
|
},
|
|
},
|
|
],
|
|
{ concurrent: false }
|
|
),
|
|
},
|
|
],
|
|
{ concurrent: true }
|
|
).run()
|
|
|
|
return [originUrl, headUrl]
|
|
}
|
|
|
|
export async function cleanupProjectFolders() {
|
|
await Promise.all([
|
|
execa('rm', ['-rf', originAppFolder]),
|
|
execa('rm', ['-rf', headAppFolder]),
|
|
])
|
|
}
|
|
|
|
export async function deployProject(projectName, appFolder) {
|
|
try {
|
|
const vercelFlags = ['--scope', TEST_TEAM_NAME]
|
|
const vercelEnv = { ...process.env, TOKEN: TEST_TOKEN }
|
|
|
|
// link the project
|
|
const linkRes = await execa(
|
|
'vercel',
|
|
['link', '-p', projectName, '--confirm', ...vercelFlags],
|
|
{
|
|
cwd: appFolder,
|
|
env: vercelEnv,
|
|
}
|
|
)
|
|
|
|
if (linkRes.exitCode !== 0) {
|
|
throw new Error(
|
|
`Failed to link project ${linkRes.stdout} ${linkRes.stderr} (${linkRes.exitCode})`
|
|
)
|
|
}
|
|
|
|
const deployRes = await execa(
|
|
'vercel',
|
|
[
|
|
'deploy',
|
|
'--build-env',
|
|
'NEXT_PRIVATE_TEST_MODE=1',
|
|
'--build-env',
|
|
'NEXT_TELEMETRY_DISABLED=1',
|
|
...(VERCEL_EDGE_FUNCTIONS_BRIDGE_PKG
|
|
? [
|
|
'--build-env',
|
|
`VERCEL_EDGE_FUNCTIONS_BRIDGE_PKG=${VERCEL_EDGE_FUNCTIONS_BRIDGE_PKG}`,
|
|
]
|
|
: []),
|
|
'--force',
|
|
...vercelFlags,
|
|
...(forceCrash ? ['--env', 'CRASH_FUNCTION=1'] : []),
|
|
],
|
|
{
|
|
cwd: appFolder,
|
|
env: vercelEnv,
|
|
}
|
|
)
|
|
|
|
if (deployRes.exitCode !== 0) {
|
|
throw new Error(
|
|
`Failed to deploy project ${linkRes.stdout} ${linkRes.stderr} (${linkRes.exitCode})`
|
|
)
|
|
}
|
|
|
|
return deployRes.stdout
|
|
} catch (err) {
|
|
console.log(red('Deployment failed: ', err))
|
|
throw err
|
|
}
|
|
}
|