2021-09-13 14:36:25 +02:00
|
|
|
const os = require('os')
|
|
|
|
const path = require('path')
|
|
|
|
const execa = require('execa')
|
|
|
|
const fs = require('fs-extra')
|
|
|
|
const { linkPackages } =
|
|
|
|
require('../../.github/actions/next-stats-action/src/prepare/repo-setup')()
|
|
|
|
|
|
|
|
async function createNextInstall(dependencies) {
|
|
|
|
const tmpDir = await fs.realpath(process.env.NEXT_TEST_DIR || os.tmpdir())
|
|
|
|
const origRepoDir = path.join(__dirname, '../../')
|
|
|
|
const installDir = path.join(tmpDir, `next-install-${Date.now()}`)
|
|
|
|
const tmpRepoDir = path.join(tmpDir, `next-repo-${Date.now()}`)
|
|
|
|
|
2021-11-15 20:55:32 +01:00
|
|
|
// ensure swc binary is present in the native folder if
|
|
|
|
// not already built
|
|
|
|
for (const folder of await fs.readdir(
|
|
|
|
path.join(origRepoDir, 'node_modules/@next')
|
|
|
|
)) {
|
|
|
|
if (folder.startsWith('swc-')) {
|
|
|
|
const swcPkgPath = path.join(origRepoDir, 'node_modules/@next', folder)
|
|
|
|
await fs.copy(
|
|
|
|
swcPkgPath,
|
2021-11-21 12:59:56 +01:00
|
|
|
path.join(origRepoDir, 'packages/next-swc/native'),
|
2021-11-15 20:55:32 +01:00
|
|
|
{
|
|
|
|
filter: (item) =>
|
|
|
|
item === swcPkgPath ||
|
|
|
|
(item.endsWith('.node') && !fs.pathExistsSync(item)),
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-13 14:36:25 +02:00
|
|
|
for (const item of ['package.json', 'yarn.lock', 'packages']) {
|
|
|
|
await fs.copy(path.join(origRepoDir, item), path.join(tmpRepoDir, item), {
|
|
|
|
filter: (item) => {
|
2021-10-23 10:21:44 +02:00
|
|
|
return (
|
|
|
|
!item.includes('node_modules') &&
|
|
|
|
!item.includes('.DS_Store') &&
|
|
|
|
// Exclude Rust compilation files
|
|
|
|
!/next[\\/]build[\\/]swc[\\/]target/.test(item)
|
|
|
|
)
|
2021-09-13 14:36:25 +02:00
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
2021-11-15 20:55:32 +01:00
|
|
|
|
2021-09-13 14:36:25 +02:00
|
|
|
const pkgPaths = await linkPackages(tmpRepoDir)
|
|
|
|
|
|
|
|
await fs.ensureDir(installDir)
|
|
|
|
await fs.writeFile(
|
|
|
|
path.join(installDir, 'package.json'),
|
|
|
|
JSON.stringify(
|
|
|
|
{
|
|
|
|
dependencies: {
|
|
|
|
...dependencies,
|
|
|
|
next: pkgPaths.get('next'),
|
|
|
|
},
|
|
|
|
private: true,
|
|
|
|
},
|
|
|
|
null,
|
|
|
|
2
|
|
|
|
)
|
|
|
|
)
|
|
|
|
await execa('yarn', ['install'], {
|
|
|
|
cwd: installDir,
|
|
|
|
stdio: ['ignore', 'inherit', 'inherit'],
|
|
|
|
env: {
|
|
|
|
...process.env,
|
|
|
|
YARN_CACHE_FOLDER: path.join(installDir, '.yarn-cache'),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
await fs.remove(tmpRepoDir)
|
|
|
|
return installDir
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
createNextInstall,
|
|
|
|
}
|