This repository has been archived by the owner on Jul 27, 2022. It is now read-only.
/
Gruntfile.js
128 lines (111 loc) · 3.99 KB
/
Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2015 the Secure GAE Scaffold Project Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
module.exports = function(grunt) {
// The target directory for the final build product.
var targetDirectory = 'out';
grunt.initConfig({
appengine: {
app: {
root: targetDirectory,
manageScript: [process.env.HOME,
'bin', 'google_appengine', 'appcfg.py'].join('/'),
runFlags: {
port: 8080
},
runScript: [process.env.HOME,
'bin', 'google_appengine', 'dev_appserver.py'].join('/')
}
},
build: grunt.file.readJSON('config.json'),
clean: [targetDirectory],
closureBuilder: {
options: {
closureLibraryPath: 'closure-library',
compile: true,
compilerFile: [process.env.HOME,
'bin', 'google_closure', 'compiler.jar'].join('/'),
compilerOpts: {
compilation_level: grunt.option('dev', false) ?
'SIMPLE_OPTIMIZATIONS' : 'ADVANCED_OPTIMIZATIONS'
},
namespaces: 'app',
},
js: {
src: [ 'closure-library', 'js' ],
dest: [ targetDirectory, 'static', 'app.js'].join('/'),
}
},
copy: {
source: {
cwd: 'src/',
dest: [targetDirectory, ''].join('/'),
expand: true,
src: '**'
},
static: {
cwd: 'static',
dest: [targetDirectory, 'static', ''].join('/'),
expand: true,
src: '**'
}
},
});
grunt.loadNpmTasks('grunt-appengine');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-closure-tools');
grunt.registerTask('nop', function() {});
grunt.registerTask('yaml', 'Generates app.yaml',
function() {
var appid = grunt.option('appid') ||
grunt.config.get('build.appid', false);
if (typeof(appid) !== 'string' || appid.length == 0) {
grunt.fatal('no appid');
}
var uncommitedChanges = false;
var done = this.async();
var logCallback = function(error, result, code) {
if (code != 0) {
grunt.log.writeln('git log error: ' + result);
done(false);
}
var hash = String(result).split(' ')[0].substr(0, 16);
var versionString = hash + (uncommitedChanges ? '-dev' : '');
var yamlData = grunt.file.read('app.yaml.base');
yamlData = yamlData.replace('__APPLICATION__', appid);
yamlData = yamlData.replace('__VERSION__', versionString);
grunt.log.writeln('Generating yaml for application: ' + appid);
grunt.file.write([targetDirectory, 'app.yaml'].join('/'), yamlData);
done();
};
var statusCallback = function(error, result, code) {
if (code != 0) {
grunt.log.writeln('git status error: ' + result);
done(false);
}
if (String(result).indexOf('\nnothing to commit, working ' +
'directory clean') == -1) {
uncommitedChanges = true;
}
grunt.util.spawn(
{cmd: 'git', args: ['log', '--format=oneline', '-n', '1']},
logCallback);
};
grunt.util.spawn({cmd: 'git', args: ['status']}, statusCallback);
});
grunt.registerTask('default',
['copy:source', 'copy:static',
grunt.config.get('build.use_closure') ? 'closureBuilder' : 'nop',
'yaml']);
};