From 1d1f2caab84f9fbae2af97a25373304bf8fb8ee0 Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Date: Tue, 15 Apr 2025 08:59:02 +0200 Subject: [PATCH] Fix post-install for forgejo deployment Handle initializing the forgejo database and reinstall --- installer/opengnsys_git_installer.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/installer/opengnsys_git_installer.py b/installer/opengnsys_git_installer.py index 757b40c..6047c8d 100755 --- a/installer/opengnsys_git_installer.py +++ b/installer/opengnsys_git_installer.py @@ -928,6 +928,7 @@ class OpengnsysGitInstaller: self.__logger.debug("Reloading systemd and starting service") subprocess.run(["systemctl", "daemon-reload"], check=True) subprocess.run(["systemctl", "enable", "opengnsys-forgejo"], check=True) + subprocess.run(["systemctl", "restart", "opengnsys-forgejo"], check=True) self.__logger.info("Waiting for forgejo to start") @@ -936,27 +937,38 @@ class OpengnsysGitInstaller: self.__logger.info("Configuring forgejo") - def run_forge_cmd(args): + def run_forge_cmd(args, ignore_errors = []): cmd = [self.forgejo_exe, "--config", conf_path] + args - self.__logger.debug("Running command: %s", cmd) + self.__logger.info("Running command: %s", cmd) ret = subprocess.run(cmd, check=False, capture_output=True, encoding='utf-8', user=self.ssh_user) if ret.returncode == 0: return ret.stdout.strip() else: self.__logger.error("Failed to run command: %s, return code %i", cmd, ret.returncode) - self.__logger.error("stdout: %s", ret.stdout) - self.__logger.error("stderr: %s", ret.stderr) + self.__logger.error("stdout: %s", ret.stdout.strip()) + self.__logger.error("stderr: %s", ret.stderr.strip()) + + for err in ignore_errors: + if err in ret.stderr: + self.__logger.info("Ignoring error, it's in the ignore list") + return ret.stdout.strip() + raise RuntimeError("Failed to run necessary command") + run_forge_cmd(["migrate"]) + run_forge_cmd(["admin", "doctor", "check"]) - run_forge_cmd(["admin", "user", "create", "--username", self.forgejo_user, "--password", self.forgejo_password, "--email", self.email]) + run_forge_cmd(["admin", "user", "create", "--username", self.forgejo_user, "--password", self.forgejo_password, "--email", self.email], ignore_errors=["user already exists"]) - token = run_forge_cmd(["admin", "user", "generate-access-token", "--username", self.forgejo_user, "-t", "gitapi", "--scopes", "all", "--raw"]) + token = run_forge_cmd(["admin", "user", "generate-access-token", "--username", self.forgejo_user, "-t", "gitapi", "--scopes", "all", "--raw"], ignore_errors = ["access token name has been used already"]) - with open(os.path.join(self.base_path, "etc", "ogGitApiToken.cfg"), "w+", encoding='utf-8') as token_file: - token_file.write(token) + if token: + with open(os.path.join(self.base_path, "etc", "ogGitApiToken.cfg"), "w+", encoding='utf-8') as token_file: + token_file.write(token) + else: + self.__logger.info("Keeping the old token") def add_forgejo_repo(self, repository_name, description = ""):