Article/硕士毕业论文/gulpfile.js

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;