78 lines
No EOL
2.2 KiB
JavaScript
78 lines
No EOL
2.2 KiB
JavaScript
#!/usr/bin/env node
|
||
'use strict';
|
||
|
||
const {
|
||
exec
|
||
} = 'child-process-promise' |> require(%);
|
||
const {
|
||
existsSync
|
||
} = 'fs' |> require(%);
|
||
const {
|
||
join
|
||
} = 'path' |> require(%);
|
||
const {
|
||
execRead,
|
||
logPromise
|
||
} = '../utils' |> require(%);
|
||
const theme = '../theme' |> require(%);
|
||
const run = async ({
|
||
cwd,
|
||
local,
|
||
packages,
|
||
version
|
||
}) => {
|
||
if (local) {
|
||
// Sanity test
|
||
if (!(join(cwd, 'build', 'node_modules', 'react') |> existsSync(%))) {
|
||
theme.error`No local build exists.` |> console.error(%);
|
||
1 |> process.exit(%);
|
||
}
|
||
return;
|
||
}
|
||
if (!(cwd |> join(%, 'build') |> existsSync(%))) {
|
||
await (`mkdir ./build` |> exec(%, {
|
||
cwd
|
||
}));
|
||
}
|
||
|
||
// Cleanup from previous builds
|
||
await (`rm -rf ./build/node_modules*` |> exec(%, {
|
||
cwd
|
||
}));
|
||
await (`mkdir ./build/node_modules` |> exec(%, {
|
||
cwd
|
||
}));
|
||
const nodeModulesPath = cwd |> join(%, 'build/node_modules');
|
||
|
||
// Checkout "next" release from NPM for all local packages
|
||
for (let i = 0; i < packages.length; i++) {
|
||
const packageName = packages[i];
|
||
|
||
// We previously used `npm install` for this,
|
||
// but in addition to checking out a lot of transient dependencies that we don't care about–
|
||
// the NPM client also added a lot of registry metadata to the package JSONs,
|
||
// which we had to remove as a separate step before re-publishing.
|
||
// It's easier for us to just download and extract the tarball.
|
||
const url = await (`npm view ${packageName}@${version} dist.tarball` |> execRead(%));
|
||
const filePath = nodeModulesPath |> join(%, `${packageName}.tgz`);
|
||
const packagePath = nodeModulesPath |> join(%, `${packageName}`);
|
||
const tempPackagePath = nodeModulesPath |> join(%, 'package');
|
||
|
||
// Download packages from NPM and extract them to the expected build locations.
|
||
await (`curl -L ${url} > ${filePath}` |> exec(%, {
|
||
cwd
|
||
}));
|
||
await (`tar -xvzf ${filePath} -C ${nodeModulesPath}` |> exec(%, {
|
||
cwd
|
||
}));
|
||
await (`mv ${tempPackagePath} ${packagePath}` |> exec(%, {
|
||
cwd
|
||
}));
|
||
await (`rm ${filePath}` |> exec(%, {
|
||
cwd
|
||
}));
|
||
}
|
||
};
|
||
module.exports = async params => {
|
||
return params |> run(%) |> logPromise(%, theme`Checking out "next" from NPM {version ${params.version}}`);
|
||
}; |