walrus-sites-deploy
Version:
Better Walrus Sites Deploy
206 lines (201 loc) • 8 kB
JavaScript
;
var chalk = require('chalk');
var fs = require('fs');
var path = require('path');
var url = require('url');
var EnvFileWriter = require('env-file-rw');
var child_process = require('child_process');
var commander = require('commander');
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
var path__default = /*#__PURE__*/_interopDefault(path);
var EnvFileWriter__default = /*#__PURE__*/_interopDefault(EnvFileWriter);
var __getOwnPropNames = Object.getOwnPropertyNames;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var getCliDirectory, getPackageMeta, displayErrorMessage, displayWarningMessage, displaySuccessMessage, displayMessage;
var init_utils = __esm({
"src/utils.ts"() {
getCliDirectory = () => {
const currentFileUrl = (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href));
return path__default.default.dirname(decodeURI(url.fileURLToPath(currentFileUrl)));
};
getPackageMeta = () => {
try {
const packageFile = fs.readFileSync(
path__default.default.join(getCliDirectory(), "../package.json"),
"utf8"
);
return JSON.parse(packageFile);
} catch (e) {
displayErrorMessage(`Cannot read package meta-data.`);
console.error(e);
process.exit(1);
}
};
displayErrorMessage = (message) => {
console.error(chalk__default.default.red(message));
};
displayWarningMessage = (message) => {
console.warn(chalk__default.default.yellow(message));
};
displaySuccessMessage = (message) => {
console.log(chalk__default.default.green(message));
};
displayMessage = (message) => {
console.log(message);
};
}
});
var WALRUS_SITE_OBJECT_ID_VARIABLE_NAME_BASE, deploy, readSiteObjectId, saveSiteObjectId, createFileIfNecessary, setEnvVar, buyWalTokenIfPossible, getWalrusCli, getWalrusSitesCli, getWalrusObjectIdVariableName;
var init_deploy = __esm({
"src/deploy.ts"() {
init_utils();
WALRUS_SITE_OBJECT_ID_VARIABLE_NAME_BASE = "WALRUS_SITE_OBJECT_ID";
deploy = async (sourceFolder, network, siteObjectIdFile, epochs, buyWalBeforeRun, forceUpdate) => {
if (buyWalBeforeRun) {
buyWalTokenIfPossible(network);
}
const configFilePathFull = path__default.default.join(process.cwd(), siteObjectIdFile);
const sitePathFull = path__default.default.join(process.cwd(), sourceFolder || "./dist");
await createFileIfNecessary(configFilePathFull);
let siteObjectId = await readSiteObjectId(configFilePathFull, network);
if (siteObjectId == null) {
displayMessage("Publishing the site to Walrus Sites...");
const { stdout, stderr } = await child_process.exec(
`${getWalrusSitesCli(network)} publish --epochs ${epochs} ${sitePathFull}`
);
stdout.on("data", async (data) => {
console.log(data);
const regex = /New site object ID: (.+)/;
const result = data.match(regex);
if (result == null) {
return;
}
siteObjectId = result[1].trim();
await saveSiteObjectId(configFilePathFull, network, siteObjectId);
displaySuccessMessage(`The site has been published successfully.`);
});
stderr.on("data", async (error) => {
displayErrorMessage(`Cannot publish the site at the moment.`);
console.error(error);
if (error.startsWith("[warn]")) {
return;
}
process.exit();
});
return;
}
if (siteObjectId == null) {
displayErrorMessage(
"~ The script could not find the site object ID in the output."
);
displayErrorMessage(
"~ If you see it, please add WALRUS_SITE_OBJECT_ID=[site object ID from the output] into packages/frontend/.env.local manually."
);
return;
}
displayMessage("Updating the site on Walrus Sites...");
child_process.execSync(
`${getWalrusSitesCli(network)} update ${forceUpdate ? "--force" : ""} --epochs ${epochs} ${sitePathFull} ${siteObjectId}`,
{ stdio: "inherit" }
);
displaySuccessMessage(`The site has been updated successfully.`);
};
readSiteObjectId = async (configFilePath, network) => {
const envFileWriter = new EnvFileWriter__default.default(configFilePath, false);
await envFileWriter.parse();
return envFileWriter.get(getWalrusObjectIdVariableName(network), null);
};
saveSiteObjectId = async (configFilePath, network, siteObjectId) => {
await setEnvVar(
configFilePath,
getWalrusObjectIdVariableName(network),
siteObjectId
);
};
createFileIfNecessary = async (filePath) => {
try {
await fs.promises.writeFile(filePath, "", { flag: "wx" });
} catch {
}
};
setEnvVar = async (envFilePath, name, value) => {
const envFileWriter = new EnvFileWriter__default.default(envFilePath, false);
await envFileWriter.parse();
envFileWriter.set(name, value);
await envFileWriter.save();
};
buyWalTokenIfPossible = (network) => {
displayMessage("Buying WAL coins...");
try {
child_process.execSync(`${getWalrusCli(network)} get-wal`, {
stdio: "inherit"
});
} catch (e) {
displayWarningMessage(
(e?.message || "Cannot buy WAL coins at the moment.") + " Continue the deployment..."
);
}
};
getWalrusCli = (network) => {
return network === "mainnet" ? "mwalrus" : "twalrus";
};
getWalrusSitesCli = (network) => {
return network === "mainnet" ? "msite" : "tsite";
};
getWalrusObjectIdVariableName = (network) => {
return `${WALRUS_SITE_OBJECT_ID_VARIABLE_NAME_BASE}_${network.toUpperCase()}`;
};
}
});
var require_index = __commonJS({
"src/index.ts"() {
init_deploy();
init_utils();
var main = async () => {
const packageMeta = getPackageMeta();
const program = new commander.Command();
program.name(packageMeta.name).description(packageMeta.description).version(packageMeta.version);
program.command("deploy [source]", { isDefault: true }).description(`Deploys a folder to Walrus Sites`).option(
"-n, --network [network]",
"network to use (testnet or mainnet)",
"testnet"
).option(
"-o, --site-object-id-file [siteObjectIdFile]",
"path to the config file where the site object ID is stored",
"./.env.local"
).option(
"-e, --epochs [epochs]",
'number of epochs to store the files for. "max" means 53 epochs or (2 years).',
"1"
).option(
"-b, --buy-wal-before-run [true]",
"buy WAL tokens before running the script. currently 0.5 WAL."
).option("-f, --force-update [true]", "force update").action(async (source, options) => {
await deploy(
source,
options.network,
options.siteObjectIdFile,
options.epochs,
options?.buyWalBeforeRun || false,
options?.forceUpdate || false
);
});
program.parse();
};
main().catch((e) => {
console.error(e);
});
}
});
var index = require_index();
module.exports = index;
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map