uikit
Version:
UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.
66 lines (52 loc) • 1.87 kB
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(' ');
}