Skip to content
Snippets Groups Projects
Select Git revision
  • e341f9e836b6a8bca64704acdeb93e1ef40e810f
  • master default protected
  • devel
  • misp
  • stix
  • cejkat-pr
6 results

Gruntfile.js

Blame
  • 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']);
    };