diff --git a/.github/scripts/presets_examples.mjs b/.github/scripts/presets_examples.mjs index 23ee8f26..9d1d9f7b 100644 --- a/.github/scripts/presets_examples.mjs +++ b/.github/scripts/presets_examples.mjs @@ -5,6 +5,7 @@ import yaml from "js-yaml" import paths from "path" import sgit from "simple-git" import url from "url" +import fetch from "node-fetch" //Mode const [mode = "dryrun"] = process.argv.slice(2) @@ -20,26 +21,20 @@ const git = sgit(__presets) await git.pull() const staged = new Set() -//Github action -const action = yaml.load(await fs.readFile(paths.join(__metrics, "action.yml"), "utf8")) -action.defaults = Object.fromEntries(Object.entries(action.inputs).map(([key, { default: value }]) => [key, value])) -action.input = vars => Object.fromEntries([...Object.entries(action.defaults), ...Object.entries(vars)].map(([key, value]) => [`INPUT_${key.toLocaleUpperCase()}`, value])) -action.run = async vars => - await new Promise((solve, reject) => { - let [stdout, stderr] = ["", ""] - const env = { ...process.env, ...action.input(vars), GITHUB_REPOSITORY: "lowlighter/metrics" } - const child = processes.spawn("node", ["source/app/action/index.mjs"], { env }) - child.stdout.on("data", data => stdout += data) - child.stderr.on("data", data => stderr += data) - child.on("close", code => { - if (code === 0) - return solve(stdout.match(/(?)/)?.groups?.svg ?? ``) - console.log(stdout, stderr) - reject(stdout) - }) +//Web instance +const web = {} +web.run = async vars => await fetch(`http://localhost:3000/lowlighter?${new url.URLSearchParams(Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value])))}`).then(response => response.text()) +web.start = async () => + new Promise(solve => { + let stdout = "" + web.instance = processes.spawn("node", ["source/app/web/index.mjs"], { env: { ...process.env, SANDBOX: true } }) + web.instance.stdout.on("data", data => (stdout += data, /Server ready !/.test(stdout) ? solve() : null)) + web.instance.stderr.on("data", data => console.error(`${data}`)) }) +web.stop = async () => await web.instance.kill("SIGKILL") //Generate presets examples +await web.start() for (const path of await fs.readdir(__presets)) { if (/^[.@]/.test(path)) continue @@ -49,7 +44,7 @@ for (const path of await fs.readdir(__presets)) { //Example console.log(`generating: ${preset}/example.svg`) - const svg = await action.run({ config_presets: `@${preset}`, debug_print: true, plugins_errors_fatal: true, dryrun: true, use_mocked_data: true, verify: true, token: "MOCKED_TOKEN" }) + const svg = await web.run({ config_presets: `@${preset}`, plugins_errors_fatal: true, verify: true, optimize: "css, xml" }) await fs.writeFile(paths.join(__presets, path, "example.svg"), svg) staged.add(paths.join(__presets, path, "example.svg")) @@ -71,6 +66,7 @@ for (const path of await fs.readdir(__presets)) { ) staged.add(paths.join(__presets, path, "README.md")) } +await web.stop() //Commit and push if (mode === "publish") {