Beautifully crafted timelines that are easy and intuitive to use. http://timeline.knightlab.com/
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.
103 lines
3.3 KiB
103 lines
3.3 KiB
'use strict'; |
|
|
|
// Variables |
|
var path = require('path'); |
|
|
|
module.exports = function(grunt) { |
|
|
|
// Project configuration |
|
grunt.initConfig({ |
|
pkg: grunt.file.readJSON('package.json'), |
|
|
|
// timeline configuration |
|
timeline: { |
|
compiled: 'compiled', |
|
website: '../timeline.knightlab.com' |
|
}, |
|
|
|
// cdn configuation |
|
cdn: { |
|
repo: '../cdn.knightlab.com', |
|
path: path.join('..', 'cdn.knightlab.com', 'apps', 'libs', 'timeline') |
|
}, |
|
|
|
// Banner for the top of CSS and JS files |
|
// Note: The existing Timeline repo has its own banner, so we'll ignore this for now |
|
banner: '/* <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' + |
|
' * <%= pkg.homepage %>\n' + |
|
' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author %>;\n' + |
|
' */\n', |
|
|
|
// Clean |
|
clean: { |
|
stg: { |
|
options: { force: true }, |
|
src: path.join('<%= cdn.path %>', '<%= pkg.version %>') |
|
}, |
|
stgLatest: { |
|
options: { force: true }, |
|
src: path.join('<%= cdn.path %>', 'latest') |
|
} |
|
}, |
|
|
|
// Copy |
|
copy: { |
|
website: { |
|
files: [ |
|
// Styles/Themes |
|
{ expand: true, cwd: '<%= timeline.compiled %>/css', src: ['*.css', 'themes/**'], dest: '<%= timeline.website %>/static/css'}, |
|
// Scripts |
|
{ expand: true, cwd: '<%= timeline.compiled %>/js', src: ['**/*.js'], dest: '<%= timeline.website %>/static/js'}, |
|
// Images |
|
{ expand: true, cwd: '<%= timeline.compiled %>/css', src: ['*.{png,gif,jpg}'], dest: '<%= timeline.website %>/static/img'} |
|
] |
|
}, |
|
stg: { |
|
files: [ |
|
{ |
|
expand: true, |
|
cwd: '<%= timeline.compiled %>', |
|
src: ['css/**', 'js/**', 'lib/**'], |
|
dest: path.join('<%= cdn.path %>', '<%= pkg.version %>') |
|
} |
|
] |
|
}, |
|
stgLatest: { |
|
files: [ |
|
{ |
|
expand: true, |
|
cwd: '<%= timeline.compiled %>', |
|
src: ['css/**', 'js/**', 'lib/**'], |
|
dest: path.join('<%= cdn.path %>', '<%= latest %>') |
|
} |
|
] |
|
} |
|
} |
|
}); |
|
|
|
// Load all Grunt tasks |
|
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); |
|
|
|
// Task aliases |
|
grunt.registerTask('check-for-website', 'Check for the website repository', function() { |
|
// Make sure CDN repo exists |
|
if(!grunt.file.exists(grunt.config.get('timeline.website'))) { |
|
grunt.fatal('Could not find local website repository.') |
|
} |
|
}); |
|
grunt.registerTask('check-for-cdn', 'Check for the cdn.knightlab.com repository', function() { |
|
// Make sure CDN repo exists |
|
if(!grunt.file.exists(grunt.config.get('cdn.repo'))) { |
|
grunt.fatal('Could not find local cdn repository.') |
|
} |
|
}); |
|
|
|
// Define complex tasks |
|
grunt.registerTask('website', "Copy select files to the timeline.knightlab.com website repository", |
|
['check-for-website', 'copy:website']); |
|
grunt.registerTask('stage', "Stage the release for deployment to the CDN", |
|
['check-for-cdn', 'clean:stg', 'copy:stg']); |
|
grunt.registerTask('stage-latest', "Stage the release for deployment to the CDN, and copy it to the latest directory", |
|
['stage', 'clean:stgLatest', 'copy:stgLatest']); |
|
|
|
};
|
|
|