You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hydro/build/publish.ts

68 lines
2.2 KiB
TypeScript

/* eslint-disable no-await-in-loop */
/* eslint-disable import/no-dynamic-require */
import { writeFileSync } from 'fs';
import path from 'path';
import latest from 'latest-version';
import ora from 'ora';
import { gt } from 'semver';
import { getWorkspaces, spawnAsync } from './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 && /^[0-9.]+$/.test(meta.version)) {
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.');
})();