kitematic/Gruntfile.js

418 строки
11 KiB
JavaScript
Исходник Обычный вид История

var packagejson = require('./package.json');
var electron = require('electron');
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
2015-06-10 03:16:00 +03:00
var target = grunt.option('target') || 'development';
var env = process.env;
2015-06-12 09:32:13 +03:00
env.NODE_PATH = '..:' + env.NODE_PATH;
2015-06-10 03:16:00 +03:00
env.NODE_ENV = target;
2015-06-18 10:15:47 +03:00
var BASENAME = 'Kitematic';
var OSX_OUT = './dist';
var OSX_OUT_X64 = OSX_OUT + '/' + BASENAME + '-darwin-x64';
var OSX_FILENAME = OSX_OUT_X64 + '/' + BASENAME + '.app';
var LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_amd64.deb';
2018-10-19 10:48:03 +03:00
var VERSION_FILENAME = BASENAME + '-' + packagejson.version;
grunt.initConfig({
2015-06-10 09:17:49 +03:00
IDENTITY: 'Developer ID Application: Docker Inc',
2018-10-19 10:48:03 +03:00
OSX_FILENAME,
OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g, '\\(').replace(/\)/g, '\\)'),
2018-10-19 10:48:03 +03:00
LINUX_FILENAME,
VERSION_FILENAME,
2015-06-10 08:27:27 +03:00
2015-06-10 03:16:00 +03:00
// electron
electron: {
windows: {
options: {
2015-06-18 21:38:34 +03:00
name: BASENAME,
2015-06-10 03:16:00 +03:00
dir: 'build/',
out: 'dist',
2015-06-10 03:16:00 +03:00
version: packagejson['electron-version'],
platform: 'win32',
arch: 'x64',
2015-06-12 09:32:13 +03:00
asar: true,
2018-10-12 16:57:57 +03:00
icon: 'util/kitematic.ico',
2015-06-10 03:16:00 +03:00
}
2015-06-10 03:56:08 +03:00
},
osx: {
options: {
name: BASENAME,
2015-06-10 03:56:08 +03:00
dir: 'build/',
out: 'dist',
2015-06-10 03:56:08 +03:00
version: packagejson['electron-version'],
platform: 'darwin',
arch: 'x64',
2015-06-10 07:54:11 +03:00
asar: true,
2018-10-12 16:57:57 +03:00
'app-version': packagejson.version,
icon: 'util/kitematic.icns',
2018-10-12 16:57:57 +03:00
},
2015-06-20 13:28:00 +03:00
},
linux: {
options: {
name: BASENAME,
2015-06-20 13:28:00 +03:00
dir: 'build/',
out: 'dist',
2015-06-20 13:28:00 +03:00
version: packagejson['electron-version'],
platform: 'linux',
arch: 'x64',
asar: true,
'app-bundle-id': 'com.kitematic.kitematic',
'app-version': packagejson.version,
icon: 'util/kitematic.png',
2015-06-20 13:28:00 +03:00
}
2015-06-10 03:16:00 +03:00
}
},
2015-06-16 08:06:47 +03:00
rcedit: {
exes: {
files: [{
expand: true,
cwd: 'dist/' + BASENAME + '-win32-x64',
2018-10-12 18:45:38 +03:00
src: [BASENAME + '.exe'],
2015-06-16 08:06:47 +03:00
}],
options: {
2015-06-19 06:29:35 +03:00
icon: 'util/kitematic.ico',
2015-06-16 08:06:47 +03:00
'file-version': packagejson.version,
'product-version': packagejson.version,
'version-string': {
'CompanyName': 'Docker',
2015-06-16 08:06:47 +03:00
'ProductVersion': packagejson.version,
'ProductName': BASENAME,
'FileDescription': BASENAME,
2015-06-18 21:38:34 +03:00
'InternalName': BASENAME + '.exe',
'OriginalFilename': BASENAME + '.exe',
'LegalCopyright': 'Copyright 2015-2016 Docker Inc. All rights reserved.'
2015-06-16 08:06:47 +03:00
}
}
}
},
// images
copy: {
2015-06-10 03:16:00 +03:00
dev: {
files: [{
expand: true,
cwd: '.',
2015-06-10 06:49:26 +03:00
src: ['package.json', 'settings.json', 'index.html'],
2015-06-10 03:16:00 +03:00
dest: 'build/'
}, {
expand: true,
cwd: 'images/',
src: ['**/*'],
dest: 'build/'
2018-10-12 18:45:38 +03:00
}, {
src: 'util/kitematic.icns',
dest: 'build/icon.icns',
}, {
src: 'util/kitematic.ico',
dest: 'build/icon.ico',
}, {
src: 'util/kitematic.png',
dest: 'build/icon.png',
2015-06-10 03:16:00 +03:00
}, {
expand: true,
cwd: 'fonts/',
src: ['**/*'],
dest: 'build/'
}, {
cwd: 'node_modules/',
src: Object.keys(packagejson.dependencies).map(function (dep) {
return dep + '/**/*';
}),
2015-06-10 03:16:00 +03:00
dest: 'build/node_modules/',
expand: true
}]
},
2015-06-10 03:56:08 +03:00
windows: {
2015-06-10 03:16:00 +03:00
files: [{
expand: true,
cwd: 'resources',
src: ['ssh.exe', 'OPENSSH_LICENSE', 'msys-*'],
dest: 'dist/' + BASENAME + '-win32-x64/resources/resources'
2015-06-10 06:35:46 +03:00
}],
options: {
mode: true
}
2015-06-10 03:56:08 +03:00
},
osx: {
files: [{
expand: true,
cwd: 'resources',
src: ['terminal'],
2015-06-10 08:27:27 +03:00
dest: '<%= OSX_FILENAME %>/Contents/Resources/resources/'
2015-06-10 06:35:46 +03:00
}],
options: {
2018-10-12 18:45:38 +03:00
mode: true,
},
},
},
// styles
less: {
options: {
sourceMapFileInline: true,
javascriptEnabled: true,
},
2015-06-10 03:16:00 +03:00
dist: {
files: {
'build/main.css': 'styles/main.less'
}
}
},
// javascript
babel: {
dist: {
files: [{
expand: true,
cwd: 'src/',
src: ['**/*.js'],
2018-10-19 10:48:03 +03:00
dest: 'build/',
}],
},
},
2015-06-10 03:16:00 +03:00
shell: {
electron: {
2015-06-10 03:56:08 +03:00
command: electron + ' ' + 'build',
2015-06-10 03:16:00 +03:00
options: {
async: true,
execOptions: {
2018-10-19 10:48:03 +03:00
env: env,
},
},
2015-06-10 08:27:27 +03:00
},
sign: {
options: {
failOnError: false
2015-06-10 08:27:27 +03:00
},
command: [
2015-06-10 09:17:49 +03:00
'codesign --deep -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>/Contents/Frameworks/*',
'codesign -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>',
'codesign -vvv --display <%= OSX_FILENAME_ESCAPED %>',
'codesign -v --verify <%= OSX_FILENAME_ESCAPED %>'
].join(' && ')
2015-06-10 09:17:49 +03:00
},
zip: {
2018-10-19 10:48:03 +03:00
command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + VERSION_FILENAME + '-Mac.zip'
},
linux_npm: {
command: 'cd build && npm install --production'
},
2015-06-10 03:16:00 +03:00
},
clean: {
release: ['build/', 'dist/']
2015-08-11 22:28:52 +03:00
},
compress: {
windows: {
options: {
2018-10-19 10:48:03 +03:00
archive: './release/' + VERSION_FILENAME + '-Windows.zip',
2018-10-15 15:39:00 +03:00
mode: 'zip',
2015-08-11 22:28:52 +03:00
},
files: [{
expand: true,
dot: true,
cwd: './dist/Kitematic-win32-x64',
2018-10-15 15:39:00 +03:00
src: '**/*',
}],
},
osx: {
options: {
2018-10-19 10:48:03 +03:00
archive: './release/' + VERSION_FILENAME + '-Mac.zip',
mode: 'zip',
},
files: [{
expand: true,
dot: true,
cwd: './dist/Kitematic-darwin-x64',
src: '**/*',
}],
},
2018-10-15 15:39:00 +03:00
debian: {
options: {
2018-10-19 10:48:03 +03:00
archive: './release/' + VERSION_FILENAME + '-Ubuntu.zip',
2018-10-15 15:39:00 +03:00
mode: 'zip',
},
files: [{
expand: true,
dot: true,
cwd: './dist',
src: '*.deb',
}],
},
2015-06-10 03:16:00 +03:00
},
// livereload
watch: {
options: {
2015-06-12 09:32:13 +03:00
spawn: true
},
2015-06-10 03:16:00 +03:00
livereload: {
options: {livereload: true},
files: ['build/**/*']
},
js: {
files: ['src/**/*.js'],
2015-06-12 09:32:13 +03:00
tasks: ['newer:babel']
},
less: {
files: ['styles/**/*.less'],
2015-06-16 20:07:56 +03:00
tasks: ['less']
},
copy: {
files: ['images/*', 'index.html', 'fonts/*'],
2015-06-12 09:32:13 +03:00
tasks: ['newer:copy:dev']
}
},
'electron-packager': {
build: {
options: {
platform: process.platform,
arch: process.arch,
dir: './build',
out: './dist/',
name: 'Kitematic',
icon: './util/kitematic.png',
version: packagejson['electron-version'], // set version of electron
2018-10-12 18:45:38 +03:00
overwrite: true,
}
},
osxlnx: {
options: {
platform: 'linux',
arch: 'x64',
dir: './build',
out: './dist/',
name: 'Kitematic',
version: packagejson['electron-version'], // set version of electron
2018-10-12 18:45:38 +03:00
overwrite: true,
}
2018-10-12 18:45:38 +03:00
},
},
'electron-installer-debian': {
options: {
name: BASENAME.toLowerCase(), // spaces and brackets cause linting errors
productName: BASENAME.toLowerCase(),
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
maintainer: 'Ben French <frenchben@docker.com>',
section: 'devel',
priority: 'optional',
icon: './util/kitematic.png',
lintianOverrides: [
'changelog-file-missing-in-native-package',
'executable-not-elf-or-script',
'extra-license-file',
'non-standard-dir-perm',
'non-standard-file-perm',
'non-standard-executable-perm',
'script-not-executable',
'shlib-with-executable-bit',
'binary-without-manpage',
'debian-changelog-file-missing',
'unusual-interpreter',
'wrong-path-for-interpreter',
'backup-file-in-package',
'package-contains-vcs-control-file',
'embedded-javascript-library',
'embedded-library',
'arch-dependent-file-in-usr-share'
],
categories: [
'Utility'
],
},
linux64: {
options: {
arch: 'amd64'
},
src: './dist/Kitematic-linux-x64/',
2018-10-15 15:39:00 +03:00
dest: './dist/',
rename: function (dest, src) {
2018-10-19 10:48:03 +03:00
return OSX_OUT + '/' + VERSION_FILENAME + '_amd64.deb';
2018-10-15 15:39:00 +03:00
},
},
linux32: {
options: {
arch: 'i386'
},
src: './dist/Kitematic-linux-ia32/',
2018-10-15 15:39:00 +03:00
dest: './dist/',
rename: function (dest, src) {
2018-10-19 10:48:03 +03:00
return OSX_OUT + '/' + VERSION_FILENAME + '_i386.deb';
2018-10-15 15:39:00 +03:00
},
}
},
'electron-installer-redhat': {
options: {
productName: BASENAME,
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
priority: 'optional',
icon: './util/kitematic.png',
categories: [
2018-10-12 18:45:38 +03:00
'Utilities',
],
},
linux64: {
options: {
2018-10-12 18:45:38 +03:00
arch: 'x86_64',
},
src: './dist/Kitematic-linux-x64/',
2018-10-12 18:45:38 +03:00
dest: './dist/',
2018-10-15 15:39:00 +03:00
rename: function (dest, src) {
2018-10-19 10:48:03 +03:00
return OSX_OUT + '/' + VERSION_FILENAME + '_amd64.rpm';
2018-10-15 15:39:00 +03:00
},
},
linux32: {
options: {
2018-10-12 18:45:38 +03:00
arch: 'x86',
},
src: './dist/Kitematic-linux-ia32/',
2018-10-12 18:45:38 +03:00
dest: './dist/',
2018-10-15 15:39:00 +03:00
rename: function (dest, src) {
2018-10-19 10:48:03 +03:00
return OSX_OUT + '/' + VERSION_FILENAME + '_i386.rpm';
2018-10-15 15:39:00 +03:00
},
2018-10-12 18:45:38 +03:00
},
},
});
2015-06-10 06:35:46 +03:00
// Load the plugins for linux packaging
grunt.loadNpmTasks('grunt-electron-packager');
grunt.loadNpmTasks('grunt-electron-installer-debian');
grunt.loadNpmTasks('grunt-electron-installer-redhat');
2018-10-12 16:57:57 +03:00
grunt.registerTask('build', ['newer:babel', 'less', 'newer:copy:dev']);
grunt.registerTask('default', ['build', 'shell:electron', 'watch']);
2018-10-15 15:39:00 +03:00
grunt.registerTask('release:linux', [
'clean:release', 'build', 'shell:linux_npm',
2018-10-19 10:48:03 +03:00
'electron:linux', 'electron-packager:build',
2018-10-15 15:39:00 +03:00
]);
grunt.registerTask('release:debian:x32', ['release:linux', 'electron-installer-debian:linux32', 'compress:debian']);
grunt.registerTask('release:debian:x64', ['release:linux', 'electron-installer-debian:linux64', 'compress:debian']);
grunt.registerTask('release:redhat:x32', ['release:linux', 'electron-installer-redhat:linux32']);
grunt.registerTask('release:redhat:x64', ['release:linux', 'electron-installer-redhat:linux64']);
2018-10-12 18:45:38 +03:00
grunt.registerTask('release:mac', [
'clean:release', 'build', 'shell:linux_npm',
2018-10-19 10:48:03 +03:00
'electron:osx', 'copy:osx', 'shell:sign', 'shell:zip',
2018-10-12 18:45:38 +03:00
]);
grunt.registerTask('release:windows', [
'clean:release',
'build', 'shell:linux_npm',
'electron:windows',
2018-10-15 15:39:00 +03:00
'copy:windows', 'rcedit:exes', 'compress:windows',
2018-10-12 18:45:38 +03:00
]);
process.on('SIGINT', function () {
grunt.task.run(['shell:electron:kill']);
process.exit(1);
});
};