4chan-x/Gruntfile.coffee
2013-04-16 19:45:39 -07:00

198 lines
4.6 KiB
CoffeeScript

module.exports = (grunt) ->
pkg = grunt.file.readJSON 'package.json'
concatOptions =
process:
data: pkg
# Project configuration.
grunt.initConfig
pkg: pkg
concat:
coffee:
options: concatOptions
src: [
'src/code/config.coffee'
'src/code/globals.coffee'
'src/lib/*.coffee'
'src/code/*/*.coffee'
'src/code/settings.coffee'
'src/code/main.coffee'
]
dest: 'tmp-<%= pkg.type %>/script.coffee'
crx:
options: concatOptions
files:
'builds/crx/manifest.json': 'src/meta/manifest.json'
'builds/crx/script.js': [
'src/banner.js'
'tmp-<%= pkg.type %>/script.js'
]
userjs:
options: concatOptions
src: [
'src/meta/metadata.js'
'src/meta/banner.js'
'tmp-<%= pkg.type %>/script.js'
]
dest: 'builds/<%= pkg.name %>.js'
userscript:
options: concatOptions
files:
'builds/<%= pkg.name %>.meta.js': 'src/metadata.js'
'builds/<%= pkg.name %>.user.js': [
'src/meta/metadata.js'
'src/meta/banner.js'
'tmp-<%= pkg.type %>/script.js'
]
copy:
crx:
src: 'src/img/*.png'
dest: 'builds/crx/'
expand: true
flatten: true
coffee:
script:
src: 'tmp-<%= pkg.type %>/script.coffee'
dest: 'tmp-<%= pkg.type %>/script.js'
concurrent:
build: [
'build-crx'
'build-userjs'
'build-userscript'
]
exec:
commit:
command: ->
release = "#{pkg.meta.name} v#{pkg.version}"
return [
'git checkout ' + pkg.meta.mainBranch,
'git commit -am "Release ' + release + '."',
'git tag -a ' + pkg.version + ' -m "' + release + '."',
'git tag -af stable-v3 -m "' + release + '."'
].join(' && ');
stdout: true
push:
command: 'git push origin --all && git push origin --tags'
stdout: true
watch:
all:
options:
interrupt: true
nospawn: true
files: [
'Gruntfile.coffee'
'package.json'
'src/**/*'
]
tasks: 'build'
compress:
crx:
options:
archive: 'builds/4chan-X.zip'
level: 9
pretty: true
expand: true
cwd: 'builds/crx/'
src: '**'
clean:
builds: 'builds'
tmpcrx: 'tmp-crx'
tmpuserjs: 'tmp-userjs'
tmpuserscript: 'tmp-userscript'
grunt.loadNpmTasks 'grunt-bump'
grunt.loadNpmTasks 'grunt-concurrent'
grunt.loadNpmTasks 'grunt-contrib-clean'
grunt.loadNpmTasks 'grunt-contrib-coffee'
grunt.loadNpmTasks 'grunt-contrib-compress'
grunt.loadNpmTasks 'grunt-contrib-concat'
grunt.loadNpmTasks 'grunt-contrib-copy'
grunt.loadNpmTasks 'grunt-contrib-watch'
grunt.loadNpmTasks 'grunt-exec'
grunt.registerTask 'default', [
'build'
]
grunt.registerTask 'set-build', 'Set the build type variable', (type) ->
pkg.type = type;
grunt.log.ok 'pkg.type = %s', type
grunt.registerTask 'build', [
'concurrent:build'
]
grunt.registerTask 'build-crx', [
'set-build:crx'
'concat:coffee'
'coffee:script'
'concat:crx'
'copy:crx'
'clean:tmpcrx'
]
grunt.registerTask 'build-userjs', [
'set-build:userjs'
'concat:coffee'
'coffee:script'
'concat:userjs'
'clean:tmpuserjs'
]
grunt.registerTask 'build-userscript', [
'set-build:userscript'
'concat:coffee'
'coffee:script'
'concat:userscript'
'clean:tmpuserscript'
]
grunt.registerTask 'release', [
'default'
'exec:commit'
'exec:push'
]
grunt.registerTask 'patch', [
'bump'
'reloadPkh'
'updcl:3'
]
grunt.registerTask 'minor', [
'bump:minor'
'reloadPkh'
'updcl:2'
]
grunt.registerTask 'major', [
'bump:major'
'reloadPkh'
'updcl:1'
]
grunt.registerTask 'reloadPkg', 'Reload the package', ->
# Update the `pkg` object with the new version.
pkg = grunt.file.readJSON('package.json')
concatOptions.process.data = pkg
grunt.log.ok('pkg reloaded.')
grunt.registerTask 'updcl', 'Update the changelog', (i) ->
# i is the number of #s for markdown.
version = []
version.length = +i + 1
version = version.join('#') + ' ' + pkg.version + ' *(' + grunt.template.today('yyyy-mm-dd') + ')*'
grunt.file.write 'CHANGELOG.md', version + '\n' + grunt.file.read('CHANGELOG.md')
grunt.log.ok 'Changelog updated for v' + pkg.version + '.'