129 lines
3.1 KiB
JavaScript
129 lines
3.1 KiB
JavaScript
const argv = require('minimist')(process.argv.slice(2))
|
|
const path = require('path');
|
|
const gulp = require('gulp');
|
|
const log = require('fancy-log');
|
|
const color = require('ansi-colors');
|
|
const del = require('del');
|
|
const zip = require('gulp-zip');
|
|
|
|
const packageName = 'xtuthesis';
|
|
|
|
const config = {
|
|
template: {
|
|
files: ['xtuthesis.ins',
|
|
'xtuthesis.dtx',
|
|
'tsinghua.pdf',
|
|
'xtuthesis-numeric.bst',
|
|
'xtuthesis-author-year.bst',
|
|
'xtuthesis-bachelor.bst',
|
|
'Makefile',
|
|
'latexmkrc',
|
|
'README.md',
|
|
'xtuthesis.pdf'],
|
|
// generated shold not be included for ctan archive
|
|
generated: ['xtuthesis.cls']
|
|
},
|
|
|
|
example: {
|
|
files: ['main.tex',
|
|
'spine.tex',
|
|
'main.pdf',
|
|
'spine.pdf',
|
|
'xtusetup.tex',
|
|
'math_commands.tex',
|
|
'data/*.tex',
|
|
'figures/*.*'
|
|
'logos/*.*',
|
|
'ref/*.bib']
|
|
},
|
|
|
|
dist: {
|
|
root: './dist',
|
|
files: [],
|
|
build: '',
|
|
zip: ''
|
|
},
|
|
};
|
|
|
|
function usage() {
|
|
log('Usage:');
|
|
log('\t make dist version=x.y.z');
|
|
}
|
|
|
|
function _default(callback) {
|
|
usage();
|
|
|
|
callback();
|
|
}
|
|
|
|
function bootstrap(callback) {
|
|
if (!argv.hasOwnProperty('version')) {
|
|
usage();
|
|
|
|
process.exit(1);
|
|
}
|
|
|
|
callback();
|
|
}
|
|
|
|
function cleanup(callback) {
|
|
del.sync([path.join(config.dist.root, config.dist.build)]);
|
|
|
|
log(color.green.bold(`🍺 ${config.dist.zip} generated`));
|
|
|
|
callback();
|
|
}
|
|
|
|
function copy(callback) {
|
|
const src = config.dist.files;
|
|
const dest = path.join(config.dist.root, config.dist.build);
|
|
|
|
return gulp.src(src, {
|
|
cwdbase: true
|
|
})
|
|
.pipe(gulp.dest(dest));
|
|
}
|
|
|
|
function compress(callback) {
|
|
const src = path.join(config.dist.build, '**/*');
|
|
|
|
return gulp.src(src, {
|
|
cwd: config.dist.root,
|
|
cwdbase: true
|
|
})
|
|
.pipe(zip(config.dist.zip))
|
|
.pipe(gulp.dest(config.dist.root));
|
|
}
|
|
|
|
function init_self(callback) {
|
|
config.dist.files = [...config.template.files, ...config.example.files, ...config.template.generated];
|
|
config.dist.build = `${packageName}-v${argv.version}`;
|
|
config.dist.zip = `${config.dist.build}.zip`;
|
|
|
|
log(`Removing old ${config.dist.build}...`);
|
|
del.sync([path.join(config.dist.root, config.dist.build),
|
|
path.join(config.dist.root, config.dist.zip)]);
|
|
|
|
callback();
|
|
}
|
|
|
|
function init_ctan(callback) {
|
|
config.dist.files = [...config.template.files, ...config.example.files];
|
|
config.dist.build = `${packageName}`;
|
|
config.dist.zip = `${config.dist.build}.zip`;
|
|
|
|
log(`Removing old ${config.dist.build}...`);
|
|
del.sync([path.join(config.dist.root, config.dist.build),
|
|
path.join(config.dist.root, config.dist.zip)]);
|
|
|
|
callback();
|
|
}
|
|
|
|
const build_self = gulp.series(init_self, copy, compress, cleanup);
|
|
const build_ctan = gulp.series(init_ctan, copy, compress, cleanup);
|
|
|
|
const build = gulp.series(bootstrap, build_self, build_ctan);
|
|
|
|
exports.default = _default;
|
|
exports.build = build;
|