From 54eeea998ba76557522bd6ca6fd795df7f46414d Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Wed, 23 Nov 2022 14:29:28 +0100 Subject: [PATCH] Added portainer webhook for deployment --- build.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/build.py b/build.py index c484f56..f25468f 100644 --- a/build.py +++ b/build.py @@ -1,9 +1,10 @@ from pathlib import Path from shutil import rmtree from subprocess import PIPE, run +from requests import post -def buildx(repository: str, tags: list[str], build_platforms: list[str], dockerfile: str = "Dockerfile", build_args: dict[str, str] | None = None, directory: str = ".", push: bool = True, pull: bool = False, progress: str = "auto", write_command: bool = False): +def buildx(repository: str, tags: list[str], build_platforms: list[str], dockerfile: str | Path = "Dockerfile", build_args: dict[str, str] | None = None, directory: str = ".", push: bool = True, pull: bool = False, progress: str = "auto", write_command: bool = False): if build_args is None: build_args = dict() labels = [f"{repository}:{tag}" for tag in tags] @@ -11,7 +12,7 @@ def buildx(repository: str, tags: list[str], build_platforms: list[str], dockerf "--platform", ",".join(build_platforms), *[t for (key, value) in build_args.items() for t in ("--build-arg", f"{key}={value}")], - "--file", dockerfile, + "--file", str(dockerfile), *[t for label in labels for t in ("--tag", label)], f"--progress={progress}", "--pull" if pull else None, @@ -21,11 +22,20 @@ def buildx(repository: str, tags: list[str], build_platforms: list[str], dockerf print(" ".join(command)) run(command, check=True) +def get_webhook(): + try: + with open("portainer-webhook.txt", "r") as f: + return f.read().strip() + except Exception: + return None + + if __name__ == '__main__': output_path = Path("dist") if output_path.exists(): rmtree(output_path) output_path.mkdir() + dockerfile = Path("Dockerfile.local").resolve() run(["python", "createreadmes.py"], check=True) run(["bundle.bat", "exec", "jekyll", "build", "--destination", output_path], check=True) branch = run(["git", "branch", "--show-current"], @@ -34,4 +44,20 @@ if __name__ == '__main__': stdout=PIPE, check=True).stdout.decode().strip() platforms = ['linux/amd64', 'linux/arm/v6', 'linux/arm/v7', 'linux/arm64/v8', 'linux/386', 'linux/ppc64le', 'linux/s390x'] - buildx("chenio/code2dfd", [branch, short_sha], platforms, dockerfile="Dockerfile.local") + buildx("chenio/code2dfd", [branch, short_sha], platforms, dockerfile=dockerfile) + webhook_id = get_webhook() + if webhook_id is not None: + print("Updating portainer stack...") + resp = post(f"https://docker.cnml.de/api/stacks/webhooks/{webhook_id}") + if not resp.ok: + try: + try: + error = resp.json() + except Exception: + error = resp.content.decode() + raise Exception(error) + raise Exception(f"{error['message']} ({error['details']})") + except Exception as e: + print("Failed to update:", e) + else: + print("Stack successfully updated!")