From e5829d9a4f944e9411a40c4a8be7650378db9df5 Mon Sep 17 00:00:00 2001 From: User user Date: Wed, 28 Apr 2021 11:47:52 +0200 Subject: [PATCH] Add script running abilities --- cli/commands/publish.ts | 40 +--------------------------------- cli/commands/run.ts | 18 ++++++++++++++++ cli/denreg.ts | 9 ++++++++ cli/deps.ts | 8 +++---- cli/global.ts | 3 +++ cli/helper/run_script.ts | 46 ++++++++++++++++++++++++++++++++++++++++ cli/meta.json | 5 ++++- cli/version.ts | 2 +- 8 files changed, 86 insertions(+), 45 deletions(-) create mode 100644 cli/commands/run.ts create mode 100644 cli/helper/run_script.ts diff --git a/cli/commands/publish.ts b/cli/commands/publish.ts index e6f693a..97099fd 100644 --- a/cli/commands/publish.ts +++ b/cli/commands/publish.ts @@ -1,46 +1,8 @@ import { Colors, Path, FS, Compress, Base64 } from "../deps.ts"; import { getMeta, IMeta, log, getConfig } from "../global.ts"; +import { runHooks } from "../helper/run_script.ts"; import { ServerError } from "../helper/server_error.ts"; -async function runScript(script: string) { - console.log(Colors.bold(Colors.blue("Running script:")), script); - const runPerm = await Deno.permissions.query({ - name: "run", - }); - - if (runPerm.state !== "granted") { - console.log( - Colors.red("Missing --allow-run permission. Cannot run hooks!") - ); - throw new Error("Missing --allow-run permission. Cannot run hooks!"); - } - - const process = Deno.run({ - cmd: ["deno", "run", "-A", "--unstable", script], - }); - - const status = await process.status(); - - console.log(Colors.bold(Colors.blue("Finished script:")), script); - - if (!status.success) { - throw new Error( - "A hook did not complete sucessfully. This is not a issue of denreg!" - ); - } -} - -async function runHooks(hooks: undefined | string | string[]) { - if (!hooks) return; - if (typeof hooks === "string") { - hooks = [hooks]; - } - - for (const hook of hooks) { - await runScript(hook); - } -} - export default async function publish(options: { dry: boolean }) { const originalMeta = await getMeta(); diff --git a/cli/commands/run.ts b/cli/commands/run.ts new file mode 100644 index 0000000..684a393 --- /dev/null +++ b/cli/commands/run.ts @@ -0,0 +1,18 @@ +import { Colors, Path, FS, Compress, Base64 } from "../deps.ts"; +import { getMeta, IMeta, log, getConfig } from "../global.ts"; +import { ServerError } from "../helper/server_error.ts"; + +import { runScript } from "../helper/run_script.ts"; + +export default async function run(options: {}, name: string) { + const { scripts } = await getMeta(); + if (!scripts || !scripts[name]) { + console.log(Colors.bold(Colors.red("Script not found:")), name); + } else { + let script = scripts[name]; + if (!Array.isArray(script)) script = [script]; + for (const s of script) { + await runScript(s); + } + } +} diff --git a/cli/denreg.ts b/cli/denreg.ts index ba2670b..d01b21e 100644 --- a/cli/denreg.ts +++ b/cli/denreg.ts @@ -9,6 +9,7 @@ import bumpCMD from "./commands/bump.ts"; import publishCMD from "./commands/publish.ts"; import deprecateCMD from "./commands/deprecate.ts"; import upgradeCMD from "./commands/upgrade.ts"; +import runCMD from "./commands/run.ts"; const HOME_FOLDER = Deno.env.get("HOME") || Deno.env.get("USERPROFILE") || ""; @@ -83,6 +84,14 @@ const flags = await new Cliffy.Command() .description("Upgrade to latest version of denreg cli") .action(commandWrapper(upgradeCMD)) ) + .command( + "run", + new Cliffy.Command() + .arguments("") + // .complete("name", ()=>) //TODO: add autocomplete? + .description("Run script from meta.json") + .action(commandWrapper(runCMD)) + ) .command("completions", new Cliffy.CompletionsCommand()) .command("help", new Cliffy.HelpCommand().global()) .parse(Deno.args); diff --git a/cli/deps.ts b/cli/deps.ts index 1e3bc74..00cc7bb 100644 --- a/cli/deps.ts +++ b/cli/deps.ts @@ -1,7 +1,7 @@ export * as Compress from "https://deno.hibas123.de/raw/@denreg-tar/mod.ts"; export * as Ini from "https://deno.land/x/ini@v2.1.0/mod.ts"; export * as Cliffy from "https://deno.land/x/cliffy@v0.18.2/mod.ts"; -export * as Base64 from "https://deno.land/std@0.91.0/encoding/base64.ts"; -export * as FS from "https://deno.land/std@0.91.0/fs/mod.ts"; -export * as Colors from "https://deno.land/std@0.91.0/fmt/colors.ts"; -export * as Path from "https://deno.land/std@0.91.0/path/mod.ts"; +export * as Base64 from "https://deno.land/std@0.95.0/encoding/base64.ts"; +export * as FS from "https://deno.land/std@0.95.0/fs/mod.ts"; +export * as Colors from "https://deno.land/std@0.95.0/fmt/colors.ts"; +export * as Path from "https://deno.land/std@0.95.0/path/mod.ts"; diff --git a/cli/global.ts b/cli/global.ts index 6243f57..887c5b7 100644 --- a/cli/global.ts +++ b/cli/global.ts @@ -14,6 +14,9 @@ export interface IMeta { prepublish?: string | string[]; postpublish?: string | string[]; }; + scripts?: { + [key: string]: string | string[]; + }; } let verbose = false; diff --git a/cli/helper/run_script.ts b/cli/helper/run_script.ts new file mode 100644 index 0000000..0d42804 --- /dev/null +++ b/cli/helper/run_script.ts @@ -0,0 +1,46 @@ +import { Colors } from "../deps.ts"; + +export async function runScript(script: string) { + console.log(Colors.bold(Colors.blue("Running script:")), script); + const runPerm = await Deno.permissions.query({ + name: "run", + }); + + if (runPerm.state !== "granted") { + console.log( + Colors.red("Missing --allow-run permission. Cannot run hooks!") + ); + throw new Error("Missing --allow-run permission. Cannot run hooks!"); + } + + const process = Deno.run({ + cmd: ["deno", "run", "-A", "--unstable", script], + }); + + const status = await process.status(); + + console.log(Colors.bold(Colors.blue("Finished script:")), script); + + if (!status.success) { + throw new Error( + "A script did not complete sucessfully. This is not a issue of denreg!" + ); + } +} + +export async function runHooks(hooks: undefined | string | string[]) { + if (!hooks) return; + if (typeof hooks === "string") { + hooks = [hooks]; + } + + for (const hook of hooks) { + try { + await runScript(hook); + } catch (err) { + throw new Error( + "A hook did not complete sucessfully. This is not a issue of denreg!" + ); + } + } +} diff --git a/cli/meta.json b/cli/meta.json index f37319c..53d85e8 100644 --- a/cli/meta.json +++ b/cli/meta.json @@ -1,6 +1,6 @@ { "name": "@denreg-cli", - "version": "0.2.12", + "version": "0.3.0", "description": "CLI for the DenReg package registry", "author": "Fabian Stamm ", "contributors": [], @@ -9,6 +9,9 @@ "**/*.js", "README.md" ], + "scripts": { + "test": "version.ts" + }, "hooks": { "prepublish": "pre.ts" } diff --git a/cli/version.ts b/cli/version.ts index 071d925..9bb0956 100644 --- a/cli/version.ts +++ b/cli/version.ts @@ -1 +1 @@ -export const version = "0.2.12" \ No newline at end of file +export const version = "0.3.0" \ No newline at end of file