UNPKG

walrus-sites-deploy

Version:
206 lines (201 loc) 8 kB
#!/usr/bin/env node 'use strict'; 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