Select Git revision
Gruntfile.js
Gruntfile.js 16.56 KiB
module.exports = function(grunt) {
function cbk_dir_size(err, stdout, stderr, cb) {
grunt.config.set('template.deb-control.options.data.package_size', stdout.trim());
cb();
}
function version() {
return '<%= meta.version_major %>.<%= meta.version_minor %>';
}
function package_filename_deb(lang) {
return '<%= meta.name %>-' + lang + '_' + version() + '_<%= meta.architecture %>.deb';
}
function package_filename_tar(lang, nover) {
var vs = '';
if (nover) { vs = 'latest'; } else { vs = version(); }
return '<%= meta.name %>-' + lang + '_' + vs + '_stable.tar.gz';
}
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
meta: grunt.file.readJSON('meta.json'),
// Python project paths to important directories
project_paths_python: {
'deploy_dir': 'lib_python/deploy/',
'package_dir': 'lib_python/deploy/package/',
'control_dir': 'lib_python/deploy/ctrl/',
'archive_dir': 'lib_python/deploy/archive/'
},
// Perl project paths to important directories
project_paths_perl: {
'deploy_dir': 'lib_perl/deploy/',
'package_dir': 'lib_perl/deploy/package/',
'control_dir': 'lib_perl/deploy/ctrl/',
'archive_dir': 'lib_perl/deploy/archive/'
},
// Paths related to Python DEB packages
paths_deb_python: {
'bin_dir': 'usr/local/bin/',
'etc_dir': 'usr/share/idea/',
'lib_dir': 'usr/lib/python3/dist-packages/',
'doc_dir': 'usr/share/doc/idea/',
'man_dir': 'usr/share/man/'
},
// Paths related to Perl DEB packages
paths_deb_perl: {
'bin_dir': 'usr/local/bin/',
'etc_dir': 'usr/share/idea/',
'lib_dir': 'usr/local/lib/site_perl/',
'doc_dir': 'usr/share/doc/idea/',
'man_dir': 'usr/share/man/'
},
// Paths related to Python TAR packages
paths_tar_python: {
'bin_dir': 'opt/idea/bin/',
'etc_dir': 'opt/idea/etc/',
'lib_dir': 'opt/idea/lib_python/',
'doc_dir': 'opt/idea/doc/',
'man_dir': 'opt/idea/man/'
},
// Paths related to Perl TAR packages
paths_tar_perl: {
'bin_dir': 'opt/idea/bin/',
'etc_dir': 'opt/idea/etc/',
'lib_dir': 'opt/idea/lib_perl/',
'doc_dir': 'opt/idea/doc/',
'man_dir': 'opt/idea/man/'
},
// ---------------------------------------------------------------------
// Cleanup various destinations
clean: {
// Cleanup package directory
build_python: {
src: [
"<%= project_paths_python.package_dir %>"
]
},
// Cleanup package directory
build_perl: {
src: [
"<%= project_paths_perl.package_dir %>"
]
}
},
// ---------------------------------------------------------------------
// Running shel commands
shell: {
// Update NodeJS packages (Grunt, grunt plugins...)
npm: {
command: 'npm update'
},
// Calculate directory size
dir_size_python: {
command: '/usr/bin/du -k -s <%= project_paths_python.package_dir %> | /usr/bin/cut -f 1',
options: {
callback: cbk_dir_size
}
},
// Calculate directory size
dir_size_perl: {
command: '/usr/bin/du -k -s <%= project_paths_perl.package_dir %> | /usr/bin/cut -f 1',
options: {
callback: cbk_dir_size
}
},
// Archive Python DEB packages
archive_deb_python: {
command: 'mv <%= project_paths_python.deploy_dir %>*.deb <%= project_paths_python.archive_dir %>'
},
// Archive Perl DEB packages
archive_deb_perl: {
command: 'mv <%= project_paths_perl.deploy_dir %>*.deb <%= project_paths_perl.archive_dir %>'
},
// Archive Python TAR packages
archive_tar_python: {
command: 'mv <%= project_paths_python.deploy_dir %>*.tar.gz <%= project_paths_python.archive_dir %>'
},
// Archive Perl TAR packages
archive_tar_perl: {
command: 'mv <%= project_paths_perl.deploy_dir %>*.tar.gz <%= project_paths_perl.archive_dir %>'
},
// Build Python DEB package
build_deb_python: {
command: '/usr/bin/fakeroot /usr/bin/dpkg-deb --build <%= project_paths_python.package_dir %> <%= project_paths_python.deploy_dir %>' + package_filename_deb('python')
},
// Build Perl DEB package
build_deb_perl: {
command: '/usr/bin/fakeroot /usr/bin/dpkg-deb --build <%= project_paths_perl.package_dir %> <%= project_paths_perl.deploy_dir %>' + package_filename_deb('perl')
},
// Build Python TAR package
build_tar_python: {
command: '/usr/bin/fakeroot /bin/tar -czf <%= project_paths_python.deploy_dir %>' + package_filename_tar('python', false) + ' -C <%= project_paths_python.package_dir %> .'
},
// Build Perl TAR package
build_tar_perl: {
command: '/usr/bin/fakeroot /bin/tar -czf <%= project_paths_perl.deploy_dir %>' + package_filename_tar('perl', false) + ' -C <%= project_paths_perl.package_dir %> .'
},
// FTP deployment
//ftp_deploy: {
// command: 'lftp -f .lftp'
//},
// SCP Python DEB deployment
scp_upload_deb_python: {
command: '/usr/bin/scp <%= project_paths_python.deploy_dir %>' + package_filename_deb('python') + ' <%= meta.server %>:<%= meta.server_dir_deb %>'
},
// SCP Perl DEB deployment
scp_upload_deb_perl: {
command: '/usr/bin/scp <%= project_paths_perl.deploy_dir %>' + package_filename_deb('perl') + ' <%= meta.server %>:<%= meta.server_dir_deb %>'
},
// SCP Python TAR deployment
scp_upload_tar_python: {
command: '/usr/bin/scp <%= project_paths_python.deploy_dir %>' + package_filename_tar('python', false) + ' <%= meta.server %>:<%= meta.server_dir_tar %>'
},
scp_upload_tar_python_l: {
command: '/usr/bin/scp <%= project_paths_python.deploy_dir %>' + package_filename_tar('python', true) + ' <%= meta.server %>:<%= meta.server_dir_tar %>'
},
// SCP Perl TAR deployment
scp_upload_tar_perl: {
command: '/usr/bin/scp <%= project_paths_perl.deploy_dir %>' + package_filename_tar('perl', false) + ' <%= meta.server %>:<%= meta.server_dir_tar %>'
},
scp_upload_tar_perl_l: {
command: '/usr/bin/scp <%= project_paths_perl.deploy_dir %>' + package_filename_tar('perl', true) + ' <%= meta.server %>:<%= meta.server_dir_tar %>'
},
// SSH install
ssh_install_python: {
command: '/usr/bin/ssh <%= meta.server %> /usr/bin/dpkg -i <%= meta.server_dir_deb %>' + package_filename_deb('python')
},
// SSH install
ssh_install_perl: {
command: '/usr/bin/ssh <%= meta.server %> /usr/bin/dpkg -i <%= meta.server_dir_deb %>' + package_filename_deb('perl')
},
// SSH DEB repository update
ssh_aptrepo_update: {
command: '/usr/bin/ssh mach@<%= meta.server %> apt-update mentat'
}
},
// ---------------------------------------------------------------------
// Fill in certain template files
template: {
control_deb_python: {
'options': {
'data': {
'package_name': '<%= meta.name %>-python',
'package_version': version(),
'package_size': '0',
'architecture': '<%= meta.architecture %>'
}
},
'files': {
'<%= project_paths_python.package_dir %>DEBIAN/control': ['<%= project_paths_python.control_dir %>control.tmpl']
}
},
control_deb_perl: {
'options': {
'data': {
'package_name': '<%= meta.name %>-perl',
'package_version': version(),
'package_size': '0',
'architecture': '<%= meta.architecture %>'
}
},
'files': {
'<%= project_paths_perl.package_dir %>DEBIAN/control': ['<%= project_paths_perl.control_dir %>control.tmpl']
}
},
version_deb_perl: {
'options': {
'data': {
'package_version': version()
}
},
'files': {
'<%= project_paths_perl.package_dir %><%= paths_deb_perl.doc_dir %>version': ['<%= project_paths_perl.control_dir %>version.tmpl']
}
},
version_tar_perl: {
'options': {
'data': {
'package_version': version()
}
},
'files': {
'<%= project_paths_perl.package_dir %><%= paths_tar_perl.doc_dir %>version': ['<%= project_paths_perl.control_dir %>version.tmpl']
}
}
},
// ---------------------------------------------------------------------
// Copy certain files to appropriate locations
copy: {
// Copy components for DEB package
deb_python: {
files: [
// ----- Move binaries to package location
{
expand: true,
cwd: 'lib_python/bin/',
src: './*',
dest: '<%= project_paths_python.package_dir %><%= paths_deb_python.bin_dir %>'
},
// ----- Move libraries to package location
{
expand: true,
cwd: 'lib_python/lib/',
src: './**',
dest: '<%= project_paths_python.package_dir %><%= paths_deb_python.lib_dir %>'
},
// ----- Move etc files to package location
{
expand: true,
cwd: 'schema/',
src: './**',
dest: '<%= project_paths_python.package_dir %><%= paths_deb_python.etc_dir %>'
}
]
},
// Copy components for DEB package
deb_perl: {
files: [
// ----- Move binaries to package location
{
expand: true,
cwd: 'lib_perl/bin/',
src: './*',
dest: '<%= project_paths_perl.package_dir %><%= paths_deb_perl.bin_dir %>'
},
// ----- Move libraries to package location
{
expand: true,
cwd: 'lib_perl/lib/',
src: './**',
dest: '<%= project_paths_perl.package_dir %><%= paths_deb_perl.lib_dir %>'
},
// ----- Move etc files to package location
{
expand: true,
cwd: 'schema/',
src: './**',
dest: '<%= project_paths_perl.package_dir %><%= paths_deb_perl.etc_dir %>'
}
]
},
// Copy components for DEB package
tar_perl: {
files: [
// ----- Move binaries to package location
{
expand: true,
cwd: 'lib_perl/bin/',
src: './*',
dest: '<%= project_paths_perl.package_dir %><%= paths_tar_perl.bin_dir %>'
},
// ----- Move libraries to package location
{
expand: true,
cwd: 'lib_perl/lib/',
src: './**',
dest: '<%= project_paths_perl.package_dir %><%= paths_tar_perl.lib_dir %>'
},
// ----- Move config to package location
{
expand: true,
cwd: 'schema/',
src: './**',
dest: '<%= project_paths_perl.package_dir %><%= paths_tar_perl.etc_dir %>'
}
]
},
latest_tar_perl: {
files: [
{
src: '<%= project_paths_perl.deploy_dir %>' + package_filename_tar('perl', false),
dest: '<%= project_paths_perl.deploy_dir %>' + package_filename_tar('perl', true),
}
]
}
},
// ---------------------------------------------------------------------
// Make sure all files have necessary file permissions
chmod: {
options: {
mode: '755'
},
deb_bin_python: {
src: ['<%= project_paths_python.package_dir %><%= paths_deb_python.bin_dir %>/*']
},
deb_bin_perl: {
src: ['<%= project_paths_perl.package_dir %><%= paths_deb_perl.bin_dir %>/*']
},
tar_bin_python: {
src: ['<%= project_paths_python.package_dir %><%= paths_tar_python.bin_dir %>/*']
},
tar_bin_perl: {
src: ['<%= project_paths_perl.package_dir %><%= paths_tar_perl.bin_dir %>/*']
}
}
});
// ---------------------------------------------------------------------
// Load grunt modules
require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });
require('time-grunt')(grunt);
grunt.registerTask('inc-version', function() {
v = grunt.config.get('meta.version_minor');
grunt.config.set('meta.version_minor', v + 1);
console.log("Incremented version to: " + grunt.template.process(version()));
grunt.config.set('template.deb-control.options.data.package_version', grunt.template.process(version()));
});
grunt.registerTask('save-meta', function() {
try {
obj = JSON.parse(JSON.stringify(grunt.config.get('meta')));
} catch (e){
grunt.log.error(e);
grunt.fail.warn("Error parsing the JSON data.", 3);
}
grunt.file.write('meta.json', JSON.stringify(obj, null, 4));
});
// ---------------------------------------------------------------------
// Setup custom task(s).
grunt.registerTask('next-version', ['inc-version', 'save-meta']);
grunt.registerTask('build-deb-perl', ['clean:build_perl', 'shell:archive_deb_perl', 'copy:deb_perl', 'chmod:deb_bin_perl', 'shell:dir_size_perl', 'template:control_deb_perl', 'template:version_deb_perl', 'shell:build_deb_perl', 'clean:build_perl']);
grunt.registerTask('build-tar-perl', ['clean:build_perl', 'shell:archive_tar_perl', 'copy:tar_perl', 'chmod:tar_bin_perl', 'template:version_tar_perl', 'shell:build_tar_perl', 'clean:build_perl', 'copy:latest_tar_perl']);
grunt.registerTask('build-perl', ['build-deb-perl', 'build-tar-perl']);
grunt.registerTask('deploy-deb-perl', ['build-deb-perl', 'shell:scp_upload_deb_perl', 'shell:ssh_aptrepo_update']);
grunt.registerTask('deploy-tar-perl', ['build-tar-perl', 'shell:scp_upload_tar_perl', 'shell:scp_upload_tar_perl_l']);
grunt.registerTask('deploy-perl', ['deploy-deb-perl', 'shell:ssh_aptrepo_update', 'deploy-tar-perl']);
//grunt.registerTask('ftp-deploy', ['shell:ftp_deploy']);
grunt.registerTask('update', ['shell:npm']);
grunt.registerTask('default', ['update']);
};