forked from mirror/_s
92 lines
2.0 KiB
JavaScript
92 lines
2.0 KiB
JavaScript
|
#!/usr/bin/env node
|
||
|
|
||
|
const path = require( 'path' );
|
||
|
const fs = require( 'fs' );
|
||
|
const archiver = require('archiver');
|
||
|
|
||
|
// Contains the excluded files and folders.
|
||
|
const excludes = [
|
||
|
'.DS_Store',
|
||
|
'.stylelintrc.json',
|
||
|
'.eslintrc',
|
||
|
'.git',
|
||
|
'.gitattributes',
|
||
|
'.github',
|
||
|
'.gitignore',
|
||
|
'README.md',
|
||
|
'bin',
|
||
|
'composer.json',
|
||
|
'composer.lock',
|
||
|
'node_modules',
|
||
|
'package-lock.json',
|
||
|
'package.json',
|
||
|
'vendor',
|
||
|
'.travis.yml',
|
||
|
'phpcs.xml.dist',
|
||
|
'sass',
|
||
|
];
|
||
|
|
||
|
// The path of the zip file.
|
||
|
const zipPath = path.join(
|
||
|
__dirname,
|
||
|
'/../../',
|
||
|
path.basename(path.dirname(__dirname))
|
||
|
) + '.zip';
|
||
|
|
||
|
|
||
|
// Create a file to stream archive data to.
|
||
|
let output = fs.createWriteStream( zipPath );
|
||
|
let archive = archiver('zip', {
|
||
|
zlib: { level: 9 }
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* Recursively traverse the directory tree and append the files to the archive.
|
||
|
* @param {string} directoryPath - The path of the directory being looped through.
|
||
|
*/
|
||
|
function traverseDirectoryTree( directoryPath ) {
|
||
|
const files = fs.readdirSync( directoryPath );
|
||
|
for ( const i in files ) {
|
||
|
const currentPath = directoryPath + '/' + files[i];
|
||
|
const stats = fs.statSync( currentPath );
|
||
|
let relativePath = path.relative(process.cwd(), currentPath);
|
||
|
if ( stats.isFile() && ! excludes.includes( files[i] ) ) {
|
||
|
archive.file(currentPath, {
|
||
|
name: `${relativePath}`
|
||
|
});
|
||
|
} else if ( stats.isDirectory() && ! excludes.includes( files[i] ) ) {
|
||
|
traverseDirectoryTree( currentPath );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Listen for all archive data to be written.
|
||
|
output.on('close', function () {
|
||
|
console.log(`Created ${path.basename(path.dirname(__dirname))}.zip of ${archive.pointer()} bytes`);
|
||
|
});
|
||
|
|
||
|
// Catch warnings during archiving.
|
||
|
archive.on('warning', function(err) {
|
||
|
if (err.code === 'ENOENT') {
|
||
|
// log warning
|
||
|
console.log(err);
|
||
|
} else {
|
||
|
// throw error
|
||
|
throw err;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Catch errors during archiving.
|
||
|
archive.on('error', function(err){
|
||
|
throw err;
|
||
|
});
|
||
|
|
||
|
// Pipe archive data to the file.
|
||
|
archive.pipe(output);
|
||
|
|
||
|
// Append the files to the archive.
|
||
|
traverseDirectoryTree( '.' );
|
||
|
|
||
|
// Finalize the archive.
|
||
|
archive.finalize();
|