feat: Logfile output

This commit is contained in:
Philip Gaber 2025-08-07 09:29:34 +02:00
parent 672281f5c6
commit a5861cc016
No known key found for this signature in database
GPG Key ID: 8D49EBCA3F8B797C

View File

@ -2,9 +2,11 @@
# TODOs: # TODOs:
# - Log for past runs (id/link to pipeline) # - Log for past runs (id/link to pipeline)
# - Stop / Restart Pipeline # - Stop / Restart Pipeline
# - Use toml config instead of StrEnums for easy extensibility
import gitlab import gitlab
import typer import typer
import os import os
import tomllib
from enum import StrEnum from enum import StrEnum
from typing_extensions import Annotated 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") USER = os.environ.get("OD_USER", "od-user")
GL_USER = os.environ.get("OD_GL_USER", "od-gl-user") GL_USER = os.environ.get("OD_GL_USER", "od-gl-user")
GL_PROJECT = os.environ.get("OD_GL_PROJECT", "1317") 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): class Clusters(StrEnum):
qa = "qa" qa = "qa"
run = "run" run = "run"
b1_stackit_butterfly = "b1-stackit-butterfly" b1_stackit_butterfly = "b1-stackit-butterfly"
one = "one"
class Apps(StrEnum): class Apps(StrEnum):
@ -41,6 +50,8 @@ class Apps(StrEnum):
openproject = "openproject" openproject = "openproject"
jitsi = "jitsi" jitsi = "jitsi"
notes = "notes" notes = "notes"
dev_nextcloud = "dev_nextcloud"
dev_bawu = "dev_bawu"
@app.command() @app.command()
@ -76,10 +87,12 @@ def pipeline(pid: str):
def _new_pipeline(ref: str, variables: str): def _new_pipeline(ref: str, variables: str):
variables = _parse_variables(variables) parsed_variables = _parse_variables(variables)
opendesk = gl.projects.get(1317) opendesk = gl.projects.get(1317)
new_pipeline = opendesk.pipelines.create({"ref": ref, "variables": variables}) np = opendesk.pipelines.create({"ref": ref, "variables": parsed_variables})
print(new_pipeline) log = f"[{np.created_at[:-5].replace('T', ' ')}] {np.web_url} ({ref}): {variables}\n"
print(log)
_write_to_pipeline_log(log)
@app.command() @app.command()
@ -92,6 +105,9 @@ def new_pipeline(
ee: bool = False, ee: bool = False,
env_stop: bool = False, env_stop: bool = False,
flush_external: bool = False, flush_external: bool = False,
external_provider: Annotated[
ExternalProviders, typer.Option(case_sensitive=False)
] = ExternalProviders.stackit,
debug: bool = True, debug: bool = True,
default_accounts: bool = True, default_accounts: bool = True,
deploy: Annotated[List[Apps], typer.Option(case_sensitive=False)] = [Apps.none], 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"MASTER_PASSWORD_WEB_VAR:{MASTER_PASSWORD}",
f"ENV_STOP_BEFORE:{_tf_to_yn(env_stop)}", f"ENV_STOP_BEFORE:{_tf_to_yn(env_stop)}",
f"FLUSH_EXTERNAL_SERVICES_BEFORE:{_tf_to_yn(flush_external)}", 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"RUN_TESTS:{_tf_to_yn(test)}",
f"TESTS_BRANCH:{test_branch}", f"TESTS_BRANCH:{test_branch}",
f"DEBUG_ENABLED:{_tf_to_yn(debug)}", f"DEBUG_ENABLED:{_tf_to_yn(debug)}",
@ -125,11 +142,21 @@ def new_pipeline(
elif Apps.all in deploy and len(deploy) > 1: elif Apps.all in deploy and len(deploy) > 1:
print("You cannot deploy 'all' but also specify specific apps at the same time") print("You cannot deploy 'all' but also specify specific apps at the same time")
exit(1) 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: else:
variables += [f"DEPLOY_{app.value.upper()}:yes" for app in deploy] variables += [f"DEPLOY_{app.value.upper()}:yes" for app in deploy]
print(variables)
_new_pipeline(ref, ",".join(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)}" 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__": if __name__ == "__main__":
gl.auth() gl.auth()
app() app()