mirror of
https://github.com/videojs/video.js.git
synced 2024-12-04 10:34:51 +02:00
420 lines
10 KiB
JavaScript
420 lines
10 KiB
JavaScript
module.exports = function(grunt) {
|
|
require('time-grunt')(grunt);
|
|
|
|
var pkg = grunt.file.readJSON('package.json');
|
|
var license = grunt.file.read('build/license-header.txt');
|
|
var verParts = pkg.version.split('.');
|
|
var version = {
|
|
full: pkg.version,
|
|
major: verParts[0],
|
|
minor: verParts[1],
|
|
patch: verParts[2]
|
|
};
|
|
|
|
version.majorMinor = version.major + '.' + version.minor;
|
|
grunt.vjsVersion = version;
|
|
|
|
// Project configuration.
|
|
grunt.initConfig({
|
|
pkg: pkg,
|
|
clean: {
|
|
build: ['build/temp/*'],
|
|
dist: ['dist/*']
|
|
},
|
|
jshint: {
|
|
src: {
|
|
src: ['src/js/**/*.js', 'Gruntfile.js', 'test/unit/**/*.js'],
|
|
options: {
|
|
jshintrc: '.jshintrc'
|
|
}
|
|
}
|
|
},
|
|
uglify: {
|
|
options: {
|
|
sourceMap: true,
|
|
sourceMapIn: 'build/temp/video.js.map',
|
|
sourceMapRoot: '../../src/js',
|
|
preserveComments: 'some',
|
|
mangle: true,
|
|
compress: {
|
|
sequences: true,
|
|
dead_code: true,
|
|
conditionals: true,
|
|
booleans: true,
|
|
unused: true,
|
|
if_return: true,
|
|
join_vars: true,
|
|
drop_console: true
|
|
}
|
|
},
|
|
build: {
|
|
files: {
|
|
'build/temp/video.min.js': 'build/temp/video.js'
|
|
}
|
|
}
|
|
},
|
|
dist: {},
|
|
watch: {
|
|
default: {
|
|
files: [ 'src/**/*', 'test/unit/**/*.js', 'Gruntfile.js' ],
|
|
tasks: 'dev'
|
|
},
|
|
skin: {
|
|
files: ['src/css/**/*'],
|
|
tasks: 'sass'
|
|
}
|
|
},
|
|
connect: {
|
|
preview: {
|
|
options: {
|
|
port: 9999,
|
|
keepalive: true
|
|
}
|
|
},
|
|
dev: {
|
|
options: {
|
|
port: 9999,
|
|
livereload: true
|
|
}
|
|
}
|
|
},
|
|
copy: {
|
|
minor: {
|
|
files: [
|
|
{expand: true, cwd: 'build/temp/', src: ['*'], dest: 'dist/'+version.majorMinor+'/', filter: 'isFile'} // includes files in path
|
|
]
|
|
},
|
|
patch: {
|
|
files: [
|
|
{expand: true, cwd: 'build/temp/', src: ['*'], dest: 'dist/'+version.full+'/', filter: 'isFile'} // includes files in path
|
|
]
|
|
},
|
|
fonts: { expand: true, cwd: 'src/css/font/', src: ['*'], dest: 'build/temp/font/', filter: 'isFile' },
|
|
swf: { src: './node_modules/videojs-swf/dist/video-js.swf', dest: './build/temp/video-js.swf' },
|
|
novtt: { src: './build/temp/video.js', dest: './build/temp/alt/video.novtt.js' },
|
|
dist: { expand: true, cwd: 'build/temp/', src: ['**/**'], dest: 'dist/', filter: 'isFile' },
|
|
examples: { expand: true, cwd: 'build/examples/', src: ['**/**'], dest: 'dist/examples/', filter: 'isFile' },
|
|
cdn: { expand: true, cwd: 'dist/', src: ['**/**'], dest: 'dist/cdn/', filter: 'isFile' },
|
|
},
|
|
aws_s3: {
|
|
options: {
|
|
accessKeyId: process.env.VJS_S3_KEY,
|
|
secretAccessKey: process.env.VJS_S3_SECRET,
|
|
bucket: process.env.VJS_S3_BUCKET,
|
|
access: 'public-read',
|
|
uploadConcurrency: 5
|
|
},
|
|
patch: {
|
|
files: [
|
|
{
|
|
expand: true,
|
|
cwd: 'dist/cdn/',
|
|
src: ['**'],
|
|
dest: 'vjs/'+version.full+'/',
|
|
params: { CacheControl: 'public, max-age=31536000' }
|
|
}
|
|
]
|
|
},
|
|
minor: {
|
|
files: [
|
|
{
|
|
expand: true,
|
|
cwd: 'dist/cdn/',
|
|
src: ['**'],
|
|
dest: 'vjs/'+version.majorMinor+'/',
|
|
params: { CacheControl: 'public, max-age=2628000' }
|
|
}
|
|
]
|
|
}
|
|
},
|
|
fastly: {
|
|
options: {
|
|
key: process.env.VJS_FASTLY_API_KEY
|
|
},
|
|
minor: {
|
|
options: {
|
|
host: 'vjs.zencdn.net',
|
|
urls: [
|
|
version.majorMinor+'/*'
|
|
]
|
|
}
|
|
},
|
|
patch: {
|
|
options: {
|
|
host: 'vjs.zencdn.net',
|
|
urls: [
|
|
version.full+'/*'
|
|
]
|
|
}
|
|
}
|
|
},
|
|
cssmin: {
|
|
minify: {
|
|
expand: true,
|
|
cwd: 'build/temp/',
|
|
src: ['video-js.css'],
|
|
dest: 'build/temp/',
|
|
ext: '.min.css'
|
|
}
|
|
},
|
|
sass: {
|
|
dist: {
|
|
files: {
|
|
'build/temp/video-js.css': 'src/css/video-js.scss'
|
|
}
|
|
}
|
|
},
|
|
karma: {
|
|
// this config file applies to all following configs except if overwritten
|
|
options: {
|
|
configFile: 'test/karma.conf.js'
|
|
},
|
|
|
|
// these are run locally on local browsers
|
|
dev: {
|
|
browsers: ['Chrome', 'Firefox', 'Safari']
|
|
},
|
|
chromecanary: { browsers: ['ChromeCanary'] },
|
|
chrome: { browsers: ['Chrome'] },
|
|
firefox: { browsers: ['Firefox'] },
|
|
safari: { browsers: ['Safari'] },
|
|
ie: { browsers: ['IE'] },
|
|
phantomjs: { browsers: ['PhantomJS'] },
|
|
|
|
// this only runs on PRs from the mainrepo on saucelabs
|
|
saucelabs: { browsers: ['chrome_sl'] },
|
|
chrome_sl: { browsers: ['chrome_sl'] },
|
|
firefox_sl: { browsers: ['firefox_sl'] },
|
|
safari_sl: { browsers: ['safari_sl'] },
|
|
ipad_sl: { browsers: ['ipad_sl'] },
|
|
android_sl: { browsers: ['android_sl'] },
|
|
ie_sl: { browsers: ['ie_sl'] }
|
|
},
|
|
vjsdocs: {
|
|
all: {
|
|
// TODO: Update vjsdocs to support new build, or switch to jsdoc
|
|
src: '',
|
|
dest: 'docs/api',
|
|
options: {
|
|
baseURL: 'https://github.com/videojs/video.js/blob/master/'
|
|
}
|
|
}
|
|
},
|
|
vjslanguages: {
|
|
defaults: {
|
|
files: {
|
|
'build/temp/lang': ['lang/*.json']
|
|
}
|
|
}
|
|
},
|
|
zip: {
|
|
dist: {
|
|
router: function (filepath) {
|
|
var path = require('path');
|
|
return path.relative('dist', filepath);
|
|
},
|
|
// compression: 'DEFLATE',
|
|
src: ['dist/**/*'],
|
|
dest: 'dist/video-js-' + version.full + '.zip'
|
|
}
|
|
},
|
|
version: {
|
|
options: {
|
|
pkg: 'package.json'
|
|
},
|
|
major: {
|
|
options: {
|
|
release: 'major'
|
|
},
|
|
src: ['package.json', 'bower.json', 'component.json']
|
|
},
|
|
minor: {
|
|
options: {
|
|
release: 'minor'
|
|
},
|
|
src: ['package.json', 'bower.json', 'component.json']
|
|
},
|
|
patch: {
|
|
options: {
|
|
release: 'patch'
|
|
},
|
|
src: ['package.json', 'bower.json', 'component.json']
|
|
},
|
|
prerelease: {
|
|
options: {
|
|
release: 'prerelease'
|
|
},
|
|
src: ['package.json', 'bower.json', 'component.json']
|
|
},
|
|
css: {
|
|
options: {
|
|
prefix: '@version\\s*'
|
|
},
|
|
src: 'build/temp/video-js.css'
|
|
}
|
|
},
|
|
'github-release': {
|
|
options: {
|
|
repository: 'videojs/video.js',
|
|
auth: {
|
|
user: process.env.VJS_GITHUB_USER,
|
|
password: process.env.VJS_GITHUB_TOKEN
|
|
},
|
|
release: {
|
|
tag_name: 'v'+ version.full,
|
|
name: version.full,
|
|
body: require('chg').find(version.full).changesRaw
|
|
}
|
|
},
|
|
files: {
|
|
src: ['dist/video-js-'+ version.full +'.zip'] // Files that you want to attach to Release
|
|
}
|
|
},
|
|
browserify: {
|
|
build: {
|
|
files: {
|
|
'build/temp/video.js': ['src/js/video.js']
|
|
},
|
|
options: {
|
|
browserifyOptions: {
|
|
debug: true,
|
|
standalone: 'videojs'
|
|
},
|
|
banner: license,
|
|
plugin: [
|
|
[ 'browserify-derequire' ]
|
|
],
|
|
transform: [
|
|
require('babelify').configure({
|
|
sourceMapRelative: './src/js'
|
|
}),
|
|
['browserify-versionify', {
|
|
placeholder: '__VERSION__',
|
|
version: pkg.version
|
|
}],
|
|
['browserify-versionify', {
|
|
placeholder: '__VERSION_NO_PATCH__',
|
|
version: version.majorMinor
|
|
}]
|
|
]
|
|
}
|
|
},
|
|
test: {
|
|
files: {
|
|
'build/temp/tests.js': [
|
|
'test/globals-shim.js',
|
|
'test/unit/**/*.js'
|
|
]
|
|
},
|
|
options: {
|
|
transform: [
|
|
require('babelify').configure(),
|
|
'browserify-istanbul'
|
|
]
|
|
}
|
|
},
|
|
watch: {
|
|
files: {
|
|
'build/temp/video.js': ['src/js/video.js']
|
|
},
|
|
options: {
|
|
watch: true,
|
|
keepAlive: true,
|
|
browserifyOptions: {
|
|
debug: true,
|
|
standalone: 'videojs'
|
|
},
|
|
banner: license,
|
|
plugin: [
|
|
[ 'browserify-derequire' ]
|
|
]
|
|
}
|
|
}
|
|
},
|
|
exorcise: {
|
|
build: {
|
|
options: {},
|
|
files: {
|
|
'build/temp/video.js.map': ['build/temp/video.js'],
|
|
}
|
|
}
|
|
},
|
|
coveralls: {
|
|
options: {
|
|
// warn instead of failing when coveralls errors
|
|
// we've seen coveralls 503 relatively frequently
|
|
force: true
|
|
},
|
|
all: {
|
|
src: 'test/coverage/lcov.info'
|
|
}
|
|
},
|
|
concat: {
|
|
vtt: {
|
|
options: {
|
|
separator: '\n',
|
|
},
|
|
src: ['build/temp/video.js', 'node_modules/vtt.js/dist/vtt.js'],
|
|
dest: 'build/temp/video.js',
|
|
},
|
|
}
|
|
});
|
|
|
|
// load all the npm grunt tasks
|
|
require('load-grunt-tasks')(grunt);
|
|
|
|
grunt.registerTask('build', [
|
|
'clean:build',
|
|
'jshint',
|
|
'browserify:build',
|
|
'browserify:test',
|
|
'copy:novtt',
|
|
'concat:vtt',
|
|
'exorcise',
|
|
'uglify',
|
|
'sass',
|
|
'version:css',
|
|
'cssmin',
|
|
'copy:fonts',
|
|
'copy:swf',
|
|
'vjslanguages'
|
|
]);
|
|
|
|
grunt.registerTask('dist', [
|
|
'clean:dist',
|
|
'build',
|
|
'copy:dist',
|
|
'copy:examples',
|
|
'zip:dist'
|
|
]);
|
|
|
|
grunt.registerTask('cdn', [
|
|
'dist',
|
|
'copy:cdn',
|
|
'dist-cdn'
|
|
]);
|
|
|
|
// Remove this and add to the test task once mmcc's coverall changes are merged
|
|
grunt.registerTask('newtest', ['build', 'karma:chrome']);
|
|
|
|
// Default task.
|
|
grunt.registerTask('default', ['build', 'test-local']);
|
|
|
|
// Development watch task. Doing the minimum required.
|
|
grunt.registerTask('dev', ['connect:dev', 'jshint', 'sass', 'browserify:build', 'karma:chrome']);
|
|
|
|
// Skin development watch task.
|
|
grunt.registerTask('skin-dev', ['connect:dev', 'watch:skin']);
|
|
|
|
// Tests.
|
|
// We want to run things a little differently if it's coming from Travis vs local
|
|
if (process.env.TRAVIS) {
|
|
grunt.registerTask('test', ['build', 'test-travis', 'coveralls']);
|
|
} else {
|
|
grunt.registerTask('test', ['build', 'test-local']);
|
|
}
|
|
|
|
// Load all the tasks in the tasks directory
|
|
grunt.loadTasks('build/tasks');
|
|
};
|