From e703934708f9616a1e9de9cf37cf7fe9a5aca824 Mon Sep 17 00:00:00 2001 From: Gregory Marco Date: Sat, 25 Apr 2026 13:56:04 -0500 Subject: [PATCH] Add support for pre and post commands. --- run | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/run b/run index b041bec..c8eb8d6 100755 --- a/run +++ b/run @@ -5,8 +5,11 @@ import shutil import glob from subprocess import run -SOURCE = os.environ.get("PLUGIN_SOURCE", ".") -TARGET = os.environ['PLUGIN_TARGET'] +SOURCE = os.environ.get("PLUGIN_SOURCE", ".") +TARGET = os.environ['PLUGIN_TARGET'] +HOST = os.environ.get("PLUGIN_HOST", "") +PRE_COMMAND = os.environ.get("PLUGIN_PRE", "") +POST_COMMAND = os.environ.get("PLUGIN_POST", "") def is_target_http(target): return target.startswith("http://") or target.startswith("https://") @@ -26,6 +29,9 @@ def apply_key_permissions(keyfile): run(["Icacls", keyfile, "/c", "/t", "/Remove:g", other_user]) run(["Icacls", keyfile]) +def run_command(host, command, auth): + run(["ssh", "-i", auth, "-o", "StrictHostKeyChecking=no", "-o", "PasswordAuthentication=no", "sh", "-c", command], check=True) + def make_parent_dirs(target, auth): if is_target_http(target): return @@ -46,6 +52,18 @@ def deploy_file(source_file, target, auth): temp_file_name = None auth = None + +if HOST: + if is_target_http(HOST): + TARGET = f"{HOST}/{TARGET}" + else: + TARGET = f"{HOST}:{TARGET}" +else: + if is_target_http(TARGET): + HOST = TARGET.split("/")[0] + else: + HOST = TARGET.split(":")[0] + try: if 'PLUGIN_KEY' in os.environ: with tempfile.NamedTemporaryFile(delete=False) as deploy_key: @@ -59,8 +77,14 @@ try: else: auth = os.environ['PLUGIN_AUTHENTICATION'] + if PRE_COMMAND: + run_command(HOST, PRE_COMMAND, auth) + #make_parent_dirs(TARGET, auth) deploy(SOURCE, TARGET, auth) + + if POST_COMMAND: + run_command(HOST, POST_COMMAND, auth) finally: if temp_file_name is not None: os.remove(temp_file_name)