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:
# - 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()