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

69 lines
2.6 KiB

/* eslint-env node */
const fs = require('fs');
const util = require('./util');
const archiver = require('archiver');
const inquirer = require('inquirer');
const pkg = require('../package.json');
const dateFormat = require('dateformat');
const {execSync} = require('child_process');
const args = require('minimist')(process.argv);
const versionRe = /(\d+\.\d+\.)(\d+)(?:-([a-z]+)\.(\d+))?/;
let version = args.v || args.version;
inquireVersion()
.then(updateVersion)
.then(compile)
.then(createPackage);
async function inquireVersion() {
if (version) {
return Promise.resolve(version);
}
const prompt = inquirer.createPromptModule();
return await prompt({
name: 'version',
message: 'Enter a version',
default: () => pkg.version.replace(versionRe, (match, p1, p2, p3, p4) => p3 ? `${p1}${p2}-${p3}.${++p4}` : `${p1}${++p2}`),
validate: val => !!val.length || 'Invalid version'
}).then(res => res.version);
}
async function updateVersion(version) {
return Promise.all([
util.write('package.json', JSON.stringify(Object.assign({}, pkg, {version}), null, ' ') + '\n'),
util.read('CHANGELOG.md').then(data => util.write('CHANGELOG.md', data.replace(/^##\s*WIP/m, `## ${version.replace(versionRe, (match, p1, p2, p3, p4) => p3 ? `${p1}${p2} ${p3} ${p4}` : `${p1}${p2}`)} (${dateFormat(Date.now(), 'mmmm d, yyyy')})`))),
util.read('.github/ISSUE_TEMPLATE.md').then(data => util.write('.github/ISSUE_TEMPLATE.md', data.replace(versionRe, version))),
]).then(() => version);
}
function compile(version) {
execSync('yarn compile', {stdio: [0, 1, 2]});
execSync('yarn compile-rtl', {stdio: [0, 1, 2]});
execSync('yarn build-scss', {stdio: [0, 1, 2]});
return version
}
function createPackage(version) {
const file = `dist/uikit-${version}.zip`;
const output = fs.createWriteStream(file).on('close', () => util.logFile(file));
const archive = archiver('zip');
archive.pipe(output);
archive.file('dist/js/uikit.js', {name: '/js/uikit.js'});
archive.file('dist/js/uikit.min.js', {name: '/js/uikit.min.js'});
archive.file('dist/js/uikit-icons.js', {name: '/js/uikit-icons.js'});
archive.file('dist/js/uikit-icons.min.js', {name: '/js/uikit-icons.min.js'});
archive.file('dist/css/uikit.css', {name: '/css/uikit.css'});
archive.file('dist/css/uikit.min.css', {name: '/css/uikit.min.css'});
archive.file('dist/css/uikit-rtl.css', {name: '/css/uikit-rtl.css'});
archive.file('dist/css/uikit-rtl.min.css', {name: '/css/uikit-rtl.min.css'});
archive.finalize();
}