Chart.js/gulpfile.js

198 lines
4.6 KiB
JavaScript
Raw Normal View History

2014-06-29 19:37:07 +02:00
var gulp = require('gulp'),
2015-08-23 20:58:19 +02:00
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
util = require('gulp-util'),
jshint = require('gulp-jshint'),
size = require('gulp-size'),
connect = require('gulp-connect'),
replace = require('gulp-replace'),
htmlv = require('gulp-html-validator'),
inquirer = require('inquirer'),
semver = require('semver'),
exec = require('child_process').exec,
fs = require('fs'),
package = require('./package.json'),
bower = require('./bower.json'),
karma = require('gulp-karma');
2014-06-29 19:37:07 +02:00
var srcDir = './src/';
2015-08-23 20:58:19 +02:00
var testDir = './test/';
2014-06-29 19:37:07 +02:00
/*
* Usage : gulp build --types=Bar,Line,Doughnut
* Output: - A built Chart.js file with Core and types Bar, Line and Doughnut concatenated together
* - A minified version of this code, in Chart.min.js
2014-06-29 19:37:07 +02:00
*/
2015-08-23 20:58:19 +02:00
var srcFiles = [
'./src/core/core.js',
'./src/core/core.helpers.js',
'./src/core/core.chart.js',
'./src/core/core.element.js',
'./src/core/**',
'./src/controllers/**',
'./src/scales/**',
'./src/elements/**',
'./src/charts/**',
2015-09-11 06:46:51 +02:00
'./node_modules/color/dist/color.min.js',
'./node_modules/moment/min/moment.min.js'
];
gulp.task('build', buildTask);
gulp.task('coverage', coverageTask);
gulp.task('watch', watchTask);
gulp.task('bump', bumpTask);
gulp.task('release', ['build'], releaseTask);
gulp.task('jshint', jshintTask);
gulp.task('test', ['jshint', 'validHTML', 'unittest']);
gulp.task('size', ['library-size', 'module-sizes']);
gulp.task('server', serverTask);
gulp.task('validHTML', validHTMLTask);
gulp.task('unittest', unittestTask);
gulp.task('unittestWatch', unittestWatchTask);
gulp.task('library-size', librarySizeTask);
gulp.task('module-sizes', moduleSizesTask);
gulp.task('_open', _openTask);
gulp.task('dev', ['server', 'default']);
gulp.task('default', ['build', 'watch']);
function buildTask() {
2015-06-12 22:00:48 +02:00
2015-08-23 20:58:19 +02:00
var isCustom = !!(util.env.types),
outputDir = (isCustom) ? 'custom' : '.';
return gulp.src(srcFiles)
.pipe(concat('Chart.js'))
.pipe(replace('{{ version }}', package.version))
.pipe(gulp.dest(outputDir))
.pipe(uglify({
preserveComments: 'some'
}))
.pipe(concat('Chart.min.js'))
.pipe(gulp.dest(outputDir));
2015-06-12 22:00:48 +02:00
}
2014-06-29 19:37:07 +02:00
/*
* Usage : gulp bump
* Prompts: Version increment to bump
* Output: - New version number written into package.json & bower.json
*/
function bumpTask(complete) {
2015-08-23 20:58:19 +02:00
util.log('Current version:', util.colors.cyan(package.version));
var choices = ['major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease'].map(function(versionType) {
return versionType + ' (v' + semver.inc(package.version, versionType) + ')';
});
inquirer.prompt({
type: 'list',
name: 'version',
message: 'What version update would you like?',
choices: choices
}, function(res) {
var increment = res.version.split(' ')[0],
newVersion = semver.inc(package.version, increment);
// Set the new versions into the bower/package object
package.version = newVersion;
bower.version = newVersion;
// Write these to their own files, then build the output
fs.writeFileSync('package.json', JSON.stringify(package, null, 2));
fs.writeFileSync('bower.json', JSON.stringify(bower, null, 2));
complete();
});
}
function releaseTask() {
2015-08-23 20:58:19 +02:00
exec('git tag -a v' + package.version);
}
function jshintTask() {
2015-08-23 20:58:19 +02:00
return gulp.src(srcDir + '*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
}
2014-06-29 19:37:07 +02:00
function validHTMLTask() {
2015-08-23 20:58:19 +02:00
return gulp.src('samples/*.html')
.pipe(htmlv());
}
function unittestTask() {
var files = srcFiles.slice();
files.push(testDir + '*.js');
2015-08-23 20:58:19 +02:00
return gulp.src(files)
.pipe(karma({
configFile: 'karma.conf.js',
action: 'run'
}));
}
2015-08-23 20:58:19 +02:00
function unittestWatchTask() {
2015-08-23 20:58:19 +02:00
var files = srcFiles.slice();
files.push(testDir + '*.js');
return gulp.src(files)
.pipe(karma({
configFile: 'karma.conf.js',
2015-08-23 21:55:10 +02:00
action: 'watch'
}));
}
2015-01-01 18:57:21 +01:00
function coverageTask() {
var files = srcFiles.slice();
files.push(testDir + '*.js');
return gulp.src(files)
.pipe(karma({
configFile: 'karma.coverage.conf.js',
action: 'run'
}));
}
function librarySizeTask() {
2015-08-23 20:58:19 +02:00
return gulp.src('Chart.min.js')
.pipe(size({
gzip: true
}));
}
2014-06-29 19:37:07 +02:00
function moduleSizesTask() {
2015-08-23 20:58:19 +02:00
return gulp.src(srcDir + '*.js')
.pipe(uglify({
preserveComments: 'some'
}))
.pipe(size({
showFiles: true,
gzip: true
}));
}
2014-06-29 19:37:07 +02:00
function watchTask() {
2015-09-11 06:46:07 +02:00
if (util.env.test) {
return gulp.watch('./src/**', ['build', 'unittest', 'unittestWatch']);
}
return gulp.watch('./src/**', ['build']);
}
2014-06-29 19:37:07 +02:00
function serverTask() {
2015-08-23 20:58:19 +02:00
connect.server({
port: 8000
});
}
2014-06-29 19:37:07 +02:00
// Convenience task for opening the project straight from the command line
function _openTask() {
2015-08-23 20:58:19 +02:00
exec('open http://localhost:8000');
exec('subl .');
}