From bc290ec20f00de5c3a9c3e4669f9683866f2a10b Mon Sep 17 00:00:00 2001 From: Heiru Wu Date: Tue, 12 Mar 2024 06:37:34 +0800 Subject: [PATCH] feat(ray): separate build and push functionality --- instill/helpers/build.py | 10 ++----- instill/helpers/push.py | 56 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 instill/helpers/push.py diff --git a/instill/helpers/build.py b/instill/helpers/build.py index 80d9a93..f7a1cca 100644 --- a/instill/helpers/build.py +++ b/instill/helpers/build.py @@ -23,7 +23,6 @@ config = yaml.safe_load(f) build = config["build"] - registry = config["registry"] repo = config["repo"] tag = config["tag"] @@ -55,17 +54,12 @@ }, quiet=False, ) - Logger.i(f"[Instill Builder] {registry}/{repo}:{tag} built") for line in logs: print(*line.values()) - img.tag(f"{registry}/{repo}", tag) - Logger.i("[Instill Builder] Pushing model image...") - client.images.push(f"{registry}/{repo}", tag=tag) - client.images.remove(f"{repo}:{tag}") - Logger.i(f"[Instill Builder] {registry}/{repo}:{tag} pushed") + Logger.i(f"[Instill Builder] {repo}:{tag} built") except Exception as e: Logger.e("[Instill Builder] Build failed") Logger.e(e) finally: os.remove("Dockerfile") - Logger.i("[Instill Builder] Build successful") + Logger.i("[Instill Builder] Done") diff --git a/instill/helpers/push.py b/instill/helpers/push.py new file mode 100644 index 0000000..62cae6d --- /dev/null +++ b/instill/helpers/push.py @@ -0,0 +1,56 @@ +import argparse +import types + +import docker +import yaml + +from instill.utils.logger import Logger + +if __name__ == "__main__": + Logger.i("[Instill Builder] Setup docker...") + client = docker.from_env() + + parser = argparse.ArgumentParser() + parser.add_argument( + "-u", + "--url", + help="image registry url, in the format of host:port, default to docker.io", + default="docker.io", + required=False, + ) + + try: + args = parser.parse_args() + + Logger.i("[Instill Builder] Loading config file...") + with open("instill.yaml", "r", encoding="utf8") as f: + Logger.i("[Instill Builder] Parsing config file...") + config = yaml.safe_load(f) + + registry = args.url + repo = config["repo"] + tag = config["tag"] + + img = client.images.get(name=f"{repo}:{tag}") + img.tag(f"{registry}/{repo}", tag) + Logger.i("[Instill Builder] Pushing model image...") + logs = client.images.push(f"{registry}/{repo}", tag=tag) + if isinstance(logs, types.GeneratorType): + for line in logs: + print(*line.values()) + elif isinstance(logs, list): + for line in logs: + if "errorDetail" in line: + raise RuntimeError(line["errorDetail"]["message"]) + print(line) + else: + if "errorDetail" in logs: + err = logs.split('{"errorDetail":{"message":', 1)[1][1:-4] + raise RuntimeError(err) + print(logs) + Logger.i(f"[Instill Builder] {registry}/{repo}:{tag} pushed") + except Exception as e: + Logger.e("[Instill Builder] Push failed") + Logger.e(e) + finally: + Logger.i("[Instill Builder] Done")