import { Command } from "commander"; import { execShellCommand } from "./lib/execShellCommand.js"; import { importJson } from "./lib/importJson.js"; import { Server } from "./lib/Server.js"; async function publishAssets(options: { server: string; hostname: string }) { let pkg = await importJson("./package.json", true); let { assets: sites } = pkg.appframe; if (!Array.isArray(sites)) { sites = [sites]; } let lastCommitId = await execShellCommand("git rev-parse --short HEAD"); lastCommitId = lastCommitId.trim(); let description = `v${pkg.version} (${lastCommitId})`; let server = new Server(options.server); for (let site of sites) { if (site.scripts) { for (let scriptName of Object.keys(site.scripts)) { let script = site.scripts[scriptName]; let hostname = script.hostname ?? site.hostname ?? pkg.appframe.hostname; if (options.hostname && options.hostname !== hostname) { continue; } await server.publishSiteScript(hostname, scriptName, description); } } if (site.styles) { for (let styleName of Object.keys(site.styles)) { let style = site.styles[styleName]; let hostname = style.hostname ?? site.hostname ?? pkg.appframe.deploy?.hostname ?? pkg.appframe.hostname; if (options.hostname && options.hostname !== hostname) { continue; } await server.publishSiteStyle(hostname, styleName, description); } } if (site.templates) { for (let templateName of Object.keys(site.templates)) { let template = site.templates[templateName]; let hostname = template.hostname ?? site.hostname ?? pkg.appframe.deploy?.hostname ?? pkg.appframe.hostname; if (options.hostname && options.hostname !== hostname) { continue; } await server.uploadTemplate(hostname, templateName, description); } } } } const appPkg = await importJson("../package.json"); const program = new Command(); program .version(appPkg.version) .option("-s, --server ", "Server to publish assets on", "dev.obet.no") .option("-h, --hostname ", "Only deploy assets for this hostname") .action(publishAssets) .parseAsync(process.argv);