core/client/uikit/build/release.js
2022-03-02 14:36:17 +06:00

63 lines
1.7 KiB
JavaScript

import archiver from 'archiver';
import inquirer from 'inquirer';
import dateFormat from 'dateformat/lib/dateformat.js';
import {createWriteStream} from 'fs';
import semver from 'semver';
import {args, getVersion, glob, logFile, replaceInFile, run} from './util.js';
const {coerce, inc, prerelease, valid} = semver;
const prevVersion = await getVersion();
const version = await inquireVersion(args.v || args.version);
await Promise.all([
run(`npm version ${version} --git-tag-version false`),
replaceInFile('CHANGELOG.md', data =>
data.replace(/^##\s*WIP/m, `## ${versionFormat(version)} (${dateFormat(Date.now(), 'mmmm d, yyyy')})`)
),
replaceInFile('.github/ISSUE_TEMPLATE/bug-report.md', data =>
data.replace(prevVersion, version)
)
]);
await run('yarn compile');
await run('yarn compile-rtl');
await run('yarn build-scss');
await createPackage(version);
async function inquireVersion(v) {
if (valid(v)) {
return v;
}
const prompt = inquirer.createPromptModule();
return (await prompt({
name: 'version',
message: 'Enter a version',
default: () => inc(prevVersion, prerelease(prevVersion) ? 'prerelease' : 'patch'),
validate: val => !!val.length || 'Invalid version'
})).version;
}
async function createPackage(version) {
const file = `dist/uikit-${version}.zip`;
const archive = archiver('zip');
archive.pipe(createWriteStream(file));
(await glob('dist/{js,css}/uikit?(-icons|-rtl)?(.min).{js,css}')).forEach(file =>
archive.file(file, {name: file.substring(5)})
);
await archive.finalize();
await logFile(file);
}
function versionFormat(version) {
return [coerce(version).version].concat(prerelease(version) || []).join(' ');
}