boilerplate.js
Version:
Development Tools
243 lines (201 loc) • 8.71 kB
JavaScript
global.deploy = {
username: 'root',
server: '11.222.33.44',
branchName: child.execSync("git rev-parse --abbrev-ref HEAD").toString().trim().toLowerCase(),
domain: 'example.com',
subdomain: 'main',
getPath: () => deploy.isProd() ? deploy.main() : deploy.branch(),
main: () => `/var/www/domains/${deploy.domain}/laravel/${deploy.subdomain}`,
branch: () => `/var/www/domains/${deploy.domain}/laravel/${deploy.subdomain}-beta`,
remote: {
folder: (cmd) => child.execSync(`ssh ${deploy.username}@${deploy.server} "cd ${deploy.getPath()} && ${cmd}"`),
fn: (cmd) => child.execSync(`ssh ${deploy.username}@${deploy.server} "${cmd}"`)
},
local: (cmd) => child.execSync(`${cmd}`),
getURL: () => {
if ( deploy.isProd() ) {
return deploy.subdomain === 'main' ? `https://${deploy.domain}` : `http://${deploy.subdomain}.${deploy.domain}`;
} else {
return `http://${deploy.subdomain}-beta.${deploy.domain}`;
}
},
isProd: () => process.argv.indexOf('--prod') >= 0 ? true : false,
list: {
all: () => {
console.log('Getting List Of ALL Files To Transfer'.yellow);
// var filesToCopy = child.execSync('git ls-files && git ls-files --exclude-standard --others && git ls-files --other --ignored --exclude-standard vendor/').toString();
var filesToCopy = child.execSync('git ls-files && git ls-files --exclude-standard --others').toString();
fs.writeFileSync('./list.txt', filesToCopy);
},
modified: () => {
console.log('Getting List Of MODIFIED Files To Transfer'.yellow);
var filesToCopy = child.execSync('git diff --name-only').toString();
fs.writeFileSync('./list.txt', filesToCopy);
},
commits: (number = 3) => {
console.log(`Getting List Of Files From Last ${number} Commits`.yellow);
var filesToCopy = child.execSync(`git diff --name-only HEAD~${number} --diff-filter=d`).toString();
fs.writeFileSync('./list.txt', filesToCopy);
},
delete: () => {
child.execSync(`rm list.txt`);
}
},
init: () => {
console.log('');
if (!deploy.isProd()) {
console.log('Copying .env file'.grey);
deploy.local(`scp .env ${deploy.username}@${deploy.server}:${deploy.getPath()}`);
}
console.log('Running "php artisan config:clear"'.grey);
deploy.remote.folder(`php artisan config:clear`);
console.log('Running "php artisan cache:clear"'.grey);
deploy.remote.folder(`php artisan cache:clear`);
console.log('Running "php artisan view:clear"'.grey);
deploy.remote.folder(`php artisan view:clear`);
console.log('Running "php artisan storage:link"'.grey);
try { deploy.remote.folder(`php artisan storage:link`); } catch (error) {}
console.log('Running "php artisan key:generate"'.grey);
deploy.remote.folder(`php artisan key:generate`);
console.log('Running "composer dump-autoload"'.grey);
deploy.remote.folder(`composer dump-autoload`);
console.log(`Setting Permissions`.gray);
deploy.remote.folder(`chown -R $USER:www-data storage`);
deploy.remote.folder(`chown -R $USER:www-data bootstrap/cache`);
deploy.remote.folder(`chmod -R 775 storage`);
deploy.remote.folder(`chmod -R 775 bootstrap/cache`);
deploy.remote.folder(`touch init.confirm`);
}
};
gulp.task('deploy:vendor', function () {
let path = deploy.getPath();
deploy.remote.fn(`mkdir -p ${path}`);
console.log('');
console.log(`Zipping Vendor Folder`.gray);
deploy.local(`tar -zcvf vendor.tar.gz vendor/`);
console.log(`Uploading Vendor Folder`.yellow);
deploy.remote.fn(`mkdir -p ${path}/vendor`);
deploy.local(`scp vendor.tar.gz ${deploy.username}@${deploy.server}:${path}`);
console.log(`Extracting Vendor Folder`);
deploy.remote.folder(`tar -xzvf vendor.tar.gz`);
console.log(`Cleaning Up`.red);
deploy.remote.folder(`sudo rm vendor.tar.gz`);
deploy.local(`rm vendor.tar.gz`);
console.log(`Vendor Folder Deployed!`.green);
console.log(`${path}`.black.bgWhite);
console.log('');
});
gulp.task('deploy', function () {
try {
deploy.remote.folder('cat init.confirm');
gulp.start('deploy:changes');
} catch (error) {
gulp.start('deploy:vendor');
gulp.start('deploy:files');
deploy.init();
}
});
gulp.task('deploy:files', function () {
let path = deploy.getPath();
deploy.remote.fn(`mkdir -p ${path}`);
console.log('');
deploy.list.all();
deploy.local(`tar -zcvf all.tar.gz -T list.txt`);
console.log(`Uploading Files`.yellow);
deploy.local(`scp all.tar.gz ${deploy.username}@${deploy.server}:${path}`);
console.log(`Extracting...`);
deploy.remote.folder(`tar -xzvf all.tar.gz`);
console.log(`Cleaning Up`.red);
deploy.remote.folder(`sudo rm all.tar.gz`);
deploy.local(`rm all.tar.gz`);
deploy.list.delete();
console.log('Done!'.green);
console.log('');
console.log(deploy.getURL().black.bgWhite);
console.log(`${path}`.gray);
console.log('');
});
gulp.task('deploy:cache', function () {
console.log('');
deploy.local.fn(`tar -zcvf cache.tar.gz storage/app/public/cache`);
console.log(`Uploading Cache`.yellow);
deploy.local.fn(`scp cache.tar.gz ${deploy.username}@${deploy.server}:/var/www/domains/borntodie007.tk/laravel/${deploy.branchName}/`);
console.log(`Extracting...`);
deploy.remote.folder(`tar -xzvf cache.tar.gz`);
console.log(`Cleaning Up`.red);
deploy.remote.folder(`sudo rm cache.tar.gz`);
deploy.local.fn(`rm cache.tar.gz`);
console.log('Done!'.green);
console.log('');
});
gulp.task('deploy:changes', function () {
let path = deploy.getPath();
deploy.remote.fn(`mkdir -p ${path}`);
console.log('');
deploy.list.commits(1);
deploy.local.fn(`tar -zcvf commits.tar.gz -T list.txt`);
console.log(`Uploading Files`.yellow);
deploy.local.fn(`scp commits.tar.gz ${deploy.username}@${deploy.server}:${path}`);
console.log(`Extracting...`);
deploy.remote.folder(`tar -xzvf commits.tar.gz`);
console.log(`Cleaning Up`.red);
deploy.remote.folder(`sudo rm commits.tar.gz`);
deploy.local.fn(`rm commits.tar.gz`);
deploy.list.delete();
console.log('Done!'.green);
console.log('');
console.log(deploy.getURL().black.bgWhite);
console.log(`${path}`.gray);
console.log('');
});
gulp.task('deploy:current', function () {
console.log('');
deploy.list.commits(2);
deploy.local.fn(`tar -zcvf commits.tar.gz -T list.txt`);
console.log(`Uploading Files`.yellow);
deploy.remote.fn(`mkdir -p /var/www/domains/borntodie007.tk/laravel/${deploy.branchName}`);
deploy.local.fn(`scp commits.tar.gz ${deploy.username}@${deploy.server}:/var/www/domains/borntodie007.tk/laravel/${deploy.branchName}/`);
console.log(`Extracting...`);
deploy.remote.folder(`tar -xzvf commits.tar.gz`);
console.log(`Cleaning Up`.red);
deploy.remote.folder(`sudo rm commits.tar.gz`);
deploy.local.fn(`rm commits.tar.gz`);
deploy.list.delete();
console.log('Done!'.green);
console.log('');
console.log(deploy.getURL().black.bgWhite);
console.log(`${path}`.gray);
console.log('');
});
gulp.task('deploy:delete', function () {
console.log(`Deleting ${deploy.getPath()}`.red);
deploy.remote.fn(`sudo rm -rf ${deploy.getPath()}`);
console.log(`${deploy.getPath()} Deleted!`.green);
});
gulp.task('deploy:init', function () {
deploy.init();
});
gulp.task('deploy:fresh', function () {
gulp.start('deploy:delete');
gulp.start('deploy');
});
gulp.task('watch:js:after', function() {
gulp.start('deploy');
});
gulp.task('watch:deploy', function() {
config.watch.js.after = true;
config.watch.css.after = false;
gulp.start('watch');
});
function env(name) {
name = name.toLowerCase();
var fs = require('fs');
var file = fs.readFileSync('./.env').toString();
var found = null;
file.split('\n').forEach(line => {
if (line.toLowerCase().indexOf(name) >= 0) {
found = line.split('=')[1];
}
});
return found.trim();
}