import { glob, changed, exec_i } from "../lib/builderator.js";
import gen_players from "./gen_players.js";
export const description = "Deploys new changes to the app.";
export const options = [
['--dry-run', "Don't actually update, just pretend."],
['--no-content', "DO NOT deploy the render content, not the app."],
['--no-app', "DO NOT deploy the app, not the content."],
];
export const required = [
['--target
', "rsync the results to this directory"],
];
export const main = (opts) => {
exec_i("git pull");
const dry_run = opts.dryRun ? "--dry-run" : "";
if(opts.app) {
exec_i("npm run knex migrate:latest");
exec_i("npm run build");
// reset the icons because we need them all for the demo
exec_i("node bando.js icons");
exec_i(`rsync -av --delete admin/bando public/`);
}
if(opts.content) {
gen_players.main();
exec_i("node ./bando.js rendered");
}
const ext_list = ["html", "css", "js", "svg", "xml", "md"];
for(let ext of ext_list) {
const files = glob(`./public/**/*.${ext}`);
for(let fname of files) {
if(changed(fname, `${fname}.br`)) {
// compress the files with brotli
exec_i(`brotli -Zfk "${fname}"`);
}
// compress the files with gzip
if(changed(fname, `${fname}.gz`)) {
exec_i(`gzip -9fk "${fname}"`);
}
}
}
// sync the files
exec_i(`rsync ${dry_run} -av --exclude media --delete public/* ${ opts.target }`);
process.exit(0);
}