diff --git a/lib/constants.py b/lib/constants.py index cae1a98..9d0a980 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -114,6 +114,13 @@ "projects", ] +# Personal GitHub Repos (public, cloned for the 'adam' user). +# dest is resolved at runtime relative to the target user's home dir. +PERSONAL_GITHUB_REPOS: Dict[str, str] = { + "traefik-proxy": "https://github.com/adamamyl/traefik-proxy.git", + "dracula": "https://github.com/adamamyl/dracula.git", +} + # Firewall module: FIREWALL_SCRIPT_DEST: str = "/usr/local/bin/apply-firewall.sh" FIREWALL_SERVICE_NAME: str = "firewall.service" diff --git a/lib/installer_utils/module_personal_repos.py b/lib/installer_utils/module_personal_repos.py new file mode 100644 index 0000000..f04679d --- /dev/null +++ b/lib/installer_utils/module_personal_repos.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +from pathlib import Path + +from ..constants import PERSONAL_GITHUB_REPOS +from ..executor import Executor +from ..logger import log +from .git_tools import clone_or_update_repo + +PERSONAL_REPOS_USER: str = "adam" + + +def _setup_repo(exec_obj: Executor, key: str) -> None: + url = PERSONAL_GITHUB_REPOS[key] + user_home = Path(f"~{PERSONAL_REPOS_USER}").expanduser() + projects_dir = user_home / "projects" + dest = str(projects_dir / key) + + exec_obj.run(f"mkdir -p {projects_dir}", force_sudo=True) + exec_obj.run( + f"chown {PERSONAL_REPOS_USER}:{PERSONAL_REPOS_USER} {projects_dir}", force_sudo=True + ) + + log.info(f"Cloning/updating {key}...") + clone_or_update_repo(exec_obj, url, dest, user=PERSONAL_REPOS_USER) + exec_obj.run(f"chown -R {PERSONAL_REPOS_USER}:{PERSONAL_REPOS_USER} {dest}", force_sudo=True) + log.success(f"{key} ready at {dest}.") + + +def setup_traefik_proxy(exec_obj: Executor) -> None: + _setup_repo(exec_obj, "traefik-proxy") + + +def setup_dracula(exec_obj: Executor) -> None: + _setup_repo(exec_obj, "dracula") + + +def setup_all_personal_repos(exec_obj: Executor) -> None: + for key in PERSONAL_GITHUB_REPOS: + _setup_repo(exec_obj, key) diff --git a/setup_machine.py b/setup_machine.py index 6994b2a..c277aaf 100644 --- a/setup_machine.py +++ b/setup_machine.py @@ -107,6 +107,21 @@ def parse_args() -> Tuple[argparse.Namespace, List[str]]: group_modules.add_argument("--wolfcraig", action="store_true", dest="do_wolfcraig", help="Clone wolfcraig + ghost-docker and run server_setup.py.") + # PERSONAL GITHUB REPOS (public) + group_personal = parser.add_argument_group("Personal GitHub Repos") + group_personal.add_argument( + "--personal-repos", action="store_true", dest="do_personal_repos", + help="Clone/update all personal GitHub repos (traefik-proxy, dracula)." + ) + group_personal.add_argument( + "--traefik-proxy", action="store_true", dest="do_traefik_proxy", + help="Clone/update adamamyl/traefik-proxy." + ) + group_personal.add_argument( + "--dracula", action="store_true", dest="do_dracula", + help="Clone/update adamamyl/dracula." + ) + # --- Virtual Machine Options --- group_vm = parser.add_argument_group("Virtual Machine Options") group_vm.add_argument("--vm", "--virtmachine", action="store_true", dest="do_vm", @@ -238,7 +253,7 @@ def main() -> None: # 3. Import Modules (required here for internal command lookup and execution) from lib.installer_utils import ( # noqa: E402 module_docker, module_fake_le, module_no2id, module_ollama, - module_pseudohome, module_wolfcraig, + module_personal_repos, module_pseudohome, module_wolfcraig, tailscale, user_mgmt, packages, virtmachine, vscode, tweaks, ) from lib.installer_utils.apt_tools import apt_autoremove @@ -288,6 +303,9 @@ def main() -> None: "ollama": args.do_ollama, "firewall": args.do_firewall, "wolfcraig": args.do_wolfcraig, + "personal_repos": args.do_personal_repos, + "traefik_proxy": args.do_traefik_proxy, + "dracula": args.do_dracula, } if args.all: @@ -354,6 +372,18 @@ def main() -> None: log_module_start("WOLFCRAIG SETUP", EXEC) module_wolfcraig.setup_wolfcraig(EXEC) + # Personal GitHub Repos (public) + if tasks["personal_repos"]: + log_module_start("PERSONAL REPOS (ALL)", EXEC) + module_personal_repos.setup_all_personal_repos(EXEC) + else: + if tasks["traefik_proxy"]: + log_module_start("PERSONAL REPOS: TRAEFIK-PROXY", EXEC) + module_personal_repos.setup_traefik_proxy(EXEC) + if tasks["dracula"]: + log_module_start("PERSONAL REPOS: DRACULA", EXEC) + module_personal_repos.setup_dracula(EXEC) + # Local CA and TLS certs setup-a-tron if tasks["fake_le"]: log_module_start("FAKE-LE ORCHESTRATION", EXEC)