Files
fx-test/fluxer/scripts/ci/ci_workflow.py
Vish 3b9d759b4b feat: add fluxer upstream source and self-hosting documentation
- Clone of github.com/fluxerapp/fluxer (official upstream)
- SELF_HOSTING.md: full VM rebuild procedure, architecture overview,
  service reference, step-by-step setup, troubleshooting, seattle reference
- dev/.env.example: all env vars with secrets redacted and generation instructions
- dev/livekit.yaml: LiveKit config template with placeholder keys
- fluxer-seattle/: existing seattle deployment setup scripts
2026-03-13 00:55:14 -07:00

71 lines
1.8 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import argparse
import os
from dataclasses import dataclass
from typing import Iterable, Sequence
@dataclass(frozen=True)
class EnvArg:
flag: str
env: str
default: str = ""
dest: str | None = None
def dest_name(self) -> str:
if self.dest is not None:
return self.dest
return self.flag.lstrip("-").replace("-", "_")
def build_step_parser(
env_args: Sequence[EnvArg] | None = None,
*,
include_server_ip: bool = False,
step_required: bool = True,
) -> argparse.ArgumentParser:
parser = argparse.ArgumentParser()
if step_required:
parser.add_argument("--step", required=True)
if include_server_ip:
parser.add_argument("--server-ip", default="")
for arg in env_args or []:
parser.add_argument(arg.flag, default=arg.default, dest=arg.dest_name())
return parser
def apply_env_args(args: argparse.Namespace, env_args: Iterable[EnvArg]) -> None:
for arg in env_args:
value = getattr(args, arg.dest_name(), "")
if value:
os.environ[arg.env] = value
def apply_server_ip(args: argparse.Namespace) -> None:
value = getattr(args, "server_ip", "")
if value:
os.environ["SERVER_IP"] = value
def parse_step_env_args(
env_args: Sequence[EnvArg] | None = None,
*,
include_server_ip: bool = False,
) -> argparse.Namespace:
parser = build_step_parser(env_args, include_server_ip=include_server_ip)
args = parser.parse_args()
apply_env_args(args, env_args or [])
if include_server_ip:
apply_server_ip(args)
return args
def parse_env_args(env_args: Sequence[EnvArg]) -> argparse.Namespace:
parser = build_step_parser(env_args, step_required=False)
args = parser.parse_args()
apply_env_args(args, env_args)
return args