|
|
|
/* eslint-disable no-console */
|
|
|
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
|
|
/* eslint-disable consistent-return */
|
|
|
|
/* eslint-disable no-await-in-loop */
|
|
|
|
/* eslint-disable import/no-dynamic-require */
|
|
|
|
const esbuild = require('esbuild');
|
|
|
|
const { readFileSync, writeFileSync } = require('fs');
|
|
|
|
const major = +process.version.split('.')[0].split('v')[1];
|
|
|
|
const minor = +process.version.split('.')[1];
|
|
|
|
|
|
|
|
let transformTimeUsage = 0;
|
|
|
|
let transformCount = 0;
|
|
|
|
let displayTimeout;
|
|
|
|
function transform(filename) {
|
|
|
|
const start = new Date();
|
|
|
|
const result = esbuild.buildSync({
|
|
|
|
entryPoints: [filename],
|
|
|
|
sourcemap: 'inline',
|
|
|
|
platform: 'node',
|
|
|
|
format: 'cjs',
|
|
|
|
target: `node${major}.${minor}`,
|
|
|
|
jsx: 'transform',
|
|
|
|
write: false,
|
|
|
|
});
|
|
|
|
if (result.warnings.length) console.warn(result.warnings);
|
|
|
|
transformTimeUsage += new Date().getTime() - start.getTime();
|
|
|
|
transformCount++;
|
|
|
|
if (displayTimeout) clearTimeout(displayTimeout);
|
|
|
|
displayTimeout = setTimeout(() => console.log(`Transformed ${transformCount} files. (${transformTimeUsage}ms)`), 1000);
|
|
|
|
return result.outputFiles[0].text;
|
|
|
|
}
|
|
|
|
const ESM = ['p-queue', 'p-timeout', 'latest-version'];
|
|
|
|
require.extensions['.js'] = function loader(module, filename) {
|
|
|
|
if (ESM.filter((i) => filename.includes(i)).length || major < 14) {
|
|
|
|
return module._compile(transform(filename), filename);
|
|
|
|
}
|
|
|
|
const content = readFileSync(filename, 'utf-8');
|
|
|
|
return module._compile(content, filename);
|
|
|
|
};
|
|
|
|
require.extensions['.ts'] = require.extensions['.tsx'] = function loader(module, filename) {
|
|
|
|
return module._compile(transform(filename), filename);
|
|
|
|
};
|
|
|
|
|
|
|
|
const { gt } = require('semver');
|
|
|
|
const { default: latest } = require('latest-version');
|
|
|
|
const path = require('path');
|
|
|
|
const ora = require('ora');
|
|
|
|
const { getWorkspaces, spawnAsync } = require('./utils');
|
|
|
|
|
|
|
|
const {
|
|
|
|
CI, GITHUB_EVENT_NAME, GITHUB_REF,
|
|
|
|
} = process.env;
|
|
|
|
|
|
|
|
const tag = GITHUB_REF === 'refs/heads/master' ? 'latest' : GITHUB_REF === 'refs/heads/develop' ? 'dev' : null;
|
|
|
|
|
|
|
|
if (CI && (!tag || GITHUB_EVENT_NAME !== 'push')) {
|
|
|
|
console.log('publish skipped.');
|
|
|
|
process.exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
(async () => {
|
|
|
|
let folders = await getWorkspaces();
|
|
|
|
if (process.argv[2]) {
|
|
|
|
folders = folders.filter((p) => p.startsWith(process.argv[2]));
|
|
|
|
}
|
|
|
|
|
|
|
|
const spinner = ora();
|
|
|
|
const bumpMap = {};
|
|
|
|
|
|
|
|
let progress = 0;
|
|
|
|
spinner.start(`Loading workspaces (0/${folders.length})`);
|
|
|
|
await Promise.all(folders.map(async (name) => {
|
|
|
|
let meta;
|
|
|
|
try {
|
|
|
|
meta = require(`../${name}/package.json`);
|
|
|
|
if (!meta.private) {
|
|
|
|
try {
|
|
|
|
const version = await latest(meta.name, { version: tag });
|
|
|
|
if (gt(meta.version, version)) bumpMap[name] = meta.version;
|
|
|
|
} catch (e) {
|
|
|
|
if (e.name === 'VersionNotFoundError') bumpMap[name] = meta.version;
|
|
|
|
else throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.error(e);
|
|
|
|
}
|
|
|
|
spinner.text = `Loading workspaces (${++progress}/${folders.length})`;
|
|
|
|
}));
|
|
|
|
spinner.succeed();
|
|
|
|
|
|
|
|
if (Object.keys(bumpMap).length) {
|
|
|
|
for (const name in bumpMap) {
|
|
|
|
console.log(`publishing ${name}@${bumpMap[name]} ...`);
|
|
|
|
if (tag === 'dev') {
|
|
|
|
const pkg = require(`${name}/package.json`);
|
|
|
|
pkg.version += '-dev';
|
|
|
|
writeFileSync(path.resolve(`${name}/package.json`), JSON.stringify(pkg));
|
|
|
|
}
|
|
|
|
await spawnAsync(
|
|
|
|
`yarn npm publish --access public --tag ${tag}`,
|
|
|
|
path.resolve(name),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log('Release created successfully.');
|
|
|
|
})();
|