From a5861cc0163fe9fbd25d1beada17065c7eddf1ab Mon Sep 17 00:00:00 2001 From: Philip Gaber Date: Thu, 7 Aug 2025 09:29:34 +0200 Subject: [PATCH] feat: Logfile output --- od-cli.py | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/od-cli.py b/od-cli.py index c6eb5b2..c383412 100755 --- a/od-cli.py +++ b/od-cli.py @@ -2,9 +2,11 @@ # TODOs: # - Log for past runs (id/link to pipeline) # - Stop / Restart Pipeline +# - Use toml config instead of StrEnums for easy extensibility import gitlab import typer import os +import tomllib from enum import StrEnum from typing_extensions import Annotated @@ -18,12 +20,19 @@ MASTER_PASSWORD = os.environ.get("OD_MASTER_PASSWORD", "sovereign-workplace") USER = os.environ.get("OD_USER", "od-user") GL_USER = os.environ.get("OD_GL_USER", "od-gl-user") GL_PROJECT = os.environ.get("OD_GL_PROJECT", "1317") +LOG_FILE = os.environ.get("OD_PIPELINE_LOG", "./__pipelines.log") + + +class ExternalProviders(StrEnum): + kubernetes = "kubernetes" + stackit = "stackit" class Clusters(StrEnum): qa = "qa" run = "run" b1_stackit_butterfly = "b1-stackit-butterfly" + one = "one" class Apps(StrEnum): @@ -41,6 +50,8 @@ class Apps(StrEnum): openproject = "openproject" jitsi = "jitsi" notes = "notes" + dev_nextcloud = "dev_nextcloud" + dev_bawu = "dev_bawu" @app.command() @@ -76,10 +87,12 @@ def pipeline(pid: str): def _new_pipeline(ref: str, variables: str): - variables = _parse_variables(variables) + parsed_variables = _parse_variables(variables) opendesk = gl.projects.get(1317) - new_pipeline = opendesk.pipelines.create({"ref": ref, "variables": variables}) - print(new_pipeline) + np = opendesk.pipelines.create({"ref": ref, "variables": parsed_variables}) + log = f"[{np.created_at[:-5].replace('T', ' ')}] {np.web_url} ({ref}): {variables}\n" + print(log) + _write_to_pipeline_log(log) @app.command() @@ -92,6 +105,9 @@ def new_pipeline( ee: bool = False, env_stop: bool = False, flush_external: bool = False, + external_provider: Annotated[ + ExternalProviders, typer.Option(case_sensitive=False) + ] = ExternalProviders.stackit, debug: bool = True, default_accounts: bool = True, deploy: Annotated[List[Apps], typer.Option(case_sensitive=False)] = [Apps.none], @@ -105,6 +121,7 @@ def new_pipeline( f"MASTER_PASSWORD_WEB_VAR:{MASTER_PASSWORD}", f"ENV_STOP_BEFORE:{_tf_to_yn(env_stop)}", f"FLUSH_EXTERNAL_SERVICES_BEFORE:{_tf_to_yn(flush_external)}", + f"FLUSH_EXTERNAL_SERVICES_TYPE:{external_provider.upper()}", f"RUN_TESTS:{_tf_to_yn(test)}", f"TESTS_BRANCH:{test_branch}", f"DEBUG_ENABLED:{_tf_to_yn(debug)}", @@ -125,11 +142,21 @@ def new_pipeline( elif Apps.all in deploy and len(deploy) > 1: print("You cannot deploy 'all' but also specify specific apps at the same time") exit(1) + elif Apps.dev_nextcloud in deploy and len(deploy) == 1: + STACK = ["nextcloud", "collabora", "cryptpad", "ums", "services", "migrations"] + variables += [f"DEPLOY_{app.upper()}:yes" for app in STACK] + elif Apps.dev_nextcloud in deploy and len(deploy) > 1: + print("You cannot deploy 'dev_nextcloud' but also specify specific apps at the same time") + exit(1) + elif Apps.dev_bawu in deploy and len(deploy) == 1: + STACK = ["nextcloud", "collabora", "ums", "ox", "services", "migrations"] + variables += [f"DEPLOY_{app.upper()}:yes" for app in STACK] + elif Apps.dev_bawu in deploy and len(deploy) > 1: + print("You cannot deploy 'dev_bawu' but also specify specific apps at the same time") + exit(1) else: variables += [f"DEPLOY_{app.value.upper()}:yes" for app in deploy] - print(variables) - _new_pipeline(ref, ",".join(variables)) @@ -170,6 +197,11 @@ def _test_tf(): assert _tf_to_yn(tf) == yn, f"{tf} != {yn} but is {_tf_to_yn(tf)}" +def _write_to_pipeline_log(log: str): + with open(LOG_FILE, "a") as pipeline_log: + pipeline_log.write(log) + + if __name__ == "__main__": gl.auth() app()