2013-08-14 20:06:16 +04:00
|
|
|
fs = require 'fs'
|
2013-05-30 04:35:00 +04:00
|
|
|
path = require 'path'
|
2013-10-21 17:42:55 +04:00
|
|
|
os = require 'os'
|
2013-05-30 04:35:00 +04:00
|
|
|
|
2013-08-20 21:52:18 +04:00
|
|
|
fm = require 'json-front-matter'
|
2013-10-15 20:34:59 +04:00
|
|
|
_ = require 'underscore-plus'
|
2013-08-20 21:52:18 +04:00
|
|
|
|
|
|
|
packageJson = require './package.json'
|
|
|
|
|
2013-05-29 04:30:09 +04:00
|
|
|
module.exports = (grunt) ->
|
2013-10-28 22:39:48 +04:00
|
|
|
appName = if process.platform is 'win32' then 'Atom' else 'Atom.app'
|
2013-08-20 21:52:18 +04:00
|
|
|
[major, minor, patch] = packageJson.version.split('.')
|
2013-10-21 17:42:55 +04:00
|
|
|
tmpDir = if process.platform is 'win32' then os.tmpdir() else '/tmp'
|
|
|
|
buildDir = grunt.option('build-dir') ? path.join(tmpDir, 'atom-build')
|
2013-06-27 20:07:33 +04:00
|
|
|
shellAppDir = path.join(buildDir, appName)
|
|
|
|
contentsDir = path.join(shellAppDir, 'Contents')
|
|
|
|
appDir = path.join(contentsDir, 'Resources', 'app')
|
2013-10-28 22:39:48 +04:00
|
|
|
installRoot = if process.platform is 'win32' then process.env.ProgramFiles else '/Applications'
|
|
|
|
installDir = path.join(installRoot, appName)
|
2013-06-18 20:50:25 +04:00
|
|
|
|
2013-08-14 20:06:16 +04:00
|
|
|
coffeeConfig =
|
|
|
|
options:
|
|
|
|
sourceMap: true
|
|
|
|
glob_to_multiple:
|
|
|
|
expand: true
|
|
|
|
src: [
|
|
|
|
'src/**/*.coffee'
|
2013-09-20 01:30:39 +04:00
|
|
|
'exports/**/*.coffee'
|
2013-08-14 20:06:16 +04:00
|
|
|
'static/**/*.coffee'
|
|
|
|
]
|
|
|
|
dest: appDir
|
|
|
|
ext: '.js'
|
|
|
|
|
|
|
|
lessConfig =
|
|
|
|
options:
|
|
|
|
paths: [
|
2013-09-04 23:14:57 +04:00
|
|
|
'static/variables'
|
2013-08-14 20:06:16 +04:00
|
|
|
'static'
|
|
|
|
]
|
|
|
|
glob_to_multiple:
|
|
|
|
expand: true
|
|
|
|
src: [
|
|
|
|
'static/**/*.less'
|
|
|
|
]
|
|
|
|
dest: appDir
|
|
|
|
ext: '.css'
|
|
|
|
|
2013-09-17 01:57:48 +04:00
|
|
|
prebuildLessConfig =
|
|
|
|
src: [
|
|
|
|
'static/**/*.less'
|
2013-09-18 02:04:46 +04:00
|
|
|
'node_modules/bootstrap/less/bootstrap.less'
|
2013-09-17 01:57:48 +04:00
|
|
|
]
|
|
|
|
|
2013-08-14 20:06:16 +04:00
|
|
|
csonConfig =
|
|
|
|
options:
|
|
|
|
rootObject: true
|
|
|
|
glob_to_multiple:
|
|
|
|
expand: true
|
|
|
|
src: [
|
2013-10-05 00:15:09 +04:00
|
|
|
'menus/*.cson'
|
2013-08-21 01:12:17 +04:00
|
|
|
'keymaps/*.cson'
|
2013-08-14 20:06:16 +04:00
|
|
|
'static/**/*.cson'
|
|
|
|
]
|
|
|
|
dest: appDir
|
|
|
|
ext: '.json'
|
|
|
|
|
|
|
|
for child in fs.readdirSync('node_modules') when child isnt '.bin'
|
|
|
|
directory = path.join('node_modules', child)
|
2013-09-17 01:57:48 +04:00
|
|
|
{engines, theme} = grunt.file.readJSON(path.join(directory, 'package.json'))
|
2013-08-14 20:06:16 +04:00
|
|
|
if engines?.atom?
|
|
|
|
coffeeConfig.glob_to_multiple.src.push("#{directory}/**/*.coffee")
|
|
|
|
lessConfig.glob_to_multiple.src.push("#{directory}/**/*.less")
|
2013-09-17 01:57:48 +04:00
|
|
|
prebuildLessConfig.src.push("#{directory}/**/*.less") unless theme
|
2013-08-14 20:06:16 +04:00
|
|
|
csonConfig.glob_to_multiple.src.push("#{directory}/**/*.cson")
|
|
|
|
|
2013-05-29 04:30:09 +04:00
|
|
|
grunt.initConfig
|
|
|
|
pkg: grunt.file.readJSON('package.json')
|
|
|
|
|
2013-06-27 20:07:33 +04:00
|
|
|
atom: {appDir, appName, buildDir, contentsDir, installDir, shellAppDir}
|
|
|
|
|
2013-08-14 20:06:16 +04:00
|
|
|
coffee: coffeeConfig
|
2013-05-30 04:35:00 +04:00
|
|
|
|
2013-08-14 20:06:16 +04:00
|
|
|
less: lessConfig
|
2013-05-30 04:35:00 +04:00
|
|
|
|
2013-09-17 01:57:48 +04:00
|
|
|
'prebuild-less': prebuildLessConfig
|
|
|
|
|
2013-08-14 20:06:16 +04:00
|
|
|
cson: csonConfig
|
2013-05-30 04:35:00 +04:00
|
|
|
|
2013-05-29 04:30:09 +04:00
|
|
|
coffeelint:
|
|
|
|
options:
|
2013-06-06 19:16:23 +04:00
|
|
|
no_empty_param_list:
|
|
|
|
level: 'error'
|
2013-05-29 04:30:09 +04:00
|
|
|
max_line_length:
|
|
|
|
level: 'ignore'
|
2013-10-11 02:05:58 +04:00
|
|
|
indentation:
|
|
|
|
level: 'ignore'
|
2013-06-13 00:04:10 +04:00
|
|
|
src: [
|
|
|
|
'dot-atom/**/*.coffee'
|
2013-09-20 01:30:39 +04:00
|
|
|
'exports/**/*.coffee'
|
2013-06-13 00:04:10 +04:00
|
|
|
'src/**/*.coffee'
|
2013-09-09 20:38:16 +04:00
|
|
|
'tasks/**/*.coffee'
|
2013-09-10 02:25:26 +04:00
|
|
|
'Gruntfile.coffee'
|
2013-06-13 00:04:10 +04:00
|
|
|
]
|
2013-05-29 22:50:53 +04:00
|
|
|
test: [
|
|
|
|
'spec/*.coffee'
|
|
|
|
]
|
2013-05-29 04:30:09 +04:00
|
|
|
|
2013-05-29 23:13:47 +04:00
|
|
|
csslint:
|
|
|
|
options:
|
|
|
|
'adjoining-classes': false
|
2013-09-05 01:04:24 +04:00
|
|
|
'duplicate-background-images': false
|
2013-06-12 21:07:04 +04:00
|
|
|
'box-model': false
|
2013-06-12 20:57:58 +04:00
|
|
|
'box-sizing': false
|
|
|
|
'bulletproof-font-face': false
|
|
|
|
'compatible-vendor-prefixes': false
|
2013-08-09 03:46:58 +04:00
|
|
|
'display-property-grouping': false
|
2013-05-29 23:13:47 +04:00
|
|
|
'fallback-colors': false
|
2013-06-12 21:13:09 +04:00
|
|
|
'font-sizes': false
|
2013-06-12 20:57:58 +04:00
|
|
|
'gradients': false
|
2013-06-12 21:07:04 +04:00
|
|
|
'ids': false
|
2013-06-12 20:57:58 +04:00
|
|
|
'important': false
|
2013-06-12 21:07:04 +04:00
|
|
|
'known-properties': false
|
2013-06-18 06:58:21 +04:00
|
|
|
'outline-none': false
|
2013-06-12 21:07:04 +04:00
|
|
|
'overqualified-elements': false
|
|
|
|
'qualified-headings': false
|
|
|
|
'unique-headings': false
|
|
|
|
'universal-selector': false
|
2013-06-12 03:34:48 +04:00
|
|
|
'vendor-prefix': false
|
|
|
|
src: [
|
|
|
|
'static/**/*.css'
|
|
|
|
]
|
2013-05-29 04:30:09 +04:00
|
|
|
|
2013-06-12 20:57:58 +04:00
|
|
|
lesslint:
|
|
|
|
src: [
|
|
|
|
'static/**/*.less'
|
|
|
|
]
|
|
|
|
|
2013-08-20 03:20:13 +04:00
|
|
|
markdown:
|
|
|
|
guides:
|
|
|
|
files: [
|
2013-08-20 21:52:18 +04:00
|
|
|
expand: true
|
2013-08-20 03:20:13 +04:00
|
|
|
cwd: 'docs'
|
2013-08-20 21:52:18 +04:00
|
|
|
src: '**/*.md'
|
|
|
|
dest: 'docs/output/'
|
2013-08-20 03:20:13 +04:00
|
|
|
ext: '.html'
|
|
|
|
]
|
2013-08-20 21:52:18 +04:00
|
|
|
options:
|
|
|
|
template: 'docs/template.jst'
|
|
|
|
templateContext:
|
|
|
|
tag: "v#{major}.#{minor}"
|
|
|
|
markdownOptions:
|
|
|
|
gfm: true
|
|
|
|
preCompile: (src, context) ->
|
|
|
|
parsed = fm.parse(src)
|
|
|
|
_.extend(context, parsed.attributes)
|
|
|
|
parsed.body
|
|
|
|
|
2013-08-29 01:11:05 +04:00
|
|
|
shell:
|
|
|
|
'kill-atom':
|
2013-09-26 04:10:01 +04:00
|
|
|
command: 'pkill -9 Atom'
|
2013-08-29 01:11:05 +04:00
|
|
|
options:
|
|
|
|
stdout: false
|
|
|
|
stderr: false
|
|
|
|
failOnError: false
|
|
|
|
|
2013-05-29 04:30:09 +04:00
|
|
|
grunt.loadNpmTasks('grunt-coffeelint')
|
2013-06-12 20:57:58 +04:00
|
|
|
grunt.loadNpmTasks('grunt-lesslint')
|
2013-06-16 09:09:38 +04:00
|
|
|
grunt.loadNpmTasks('grunt-cson')
|
2013-05-29 23:13:47 +04:00
|
|
|
grunt.loadNpmTasks('grunt-contrib-csslint')
|
2013-05-30 04:35:00 +04:00
|
|
|
grunt.loadNpmTasks('grunt-contrib-coffee')
|
|
|
|
grunt.loadNpmTasks('grunt-contrib-less')
|
2013-08-20 03:20:13 +04:00
|
|
|
grunt.loadNpmTasks('grunt-markdown')
|
2013-08-29 01:11:05 +04:00
|
|
|
grunt.loadNpmTasks('grunt-shell')
|
2013-06-27 06:25:50 +04:00
|
|
|
grunt.loadTasks('tasks')
|
2013-06-27 20:07:33 +04:00
|
|
|
|
2013-09-17 01:57:48 +04:00
|
|
|
grunt.registerTask('compile', ['coffee', 'prebuild-less', 'cson'])
|
2013-06-12 20:57:58 +04:00
|
|
|
grunt.registerTask('lint', ['coffeelint', 'csslint', 'lesslint'])
|
2013-10-11 22:39:16 +04:00
|
|
|
grunt.registerTask('test', ['shell:kill-atom', 'run-specs'])
|
2013-10-14 22:43:37 +04:00
|
|
|
grunt.registerTask('ci', ['update-atom-shell', 'build', 'set-development-version', 'lint', 'test'])
|
2013-07-08 22:29:46 +04:00
|
|
|
grunt.registerTask('deploy', ['partial-clean', 'update-atom-shell', 'build', 'codesign'])
|
2013-08-20 03:20:13 +04:00
|
|
|
grunt.registerTask('docs', ['markdown:guides', 'build-docs'])
|
2013-06-21 02:43:51 +04:00
|
|
|
grunt.registerTask('default', ['update-atom-shell', 'build', 'set-development-version', 'install'])
|