| import asyncio |
| import shlex |
| from typing import Tuple |
|
|
| from git import Repo |
| from git.exc import GitCommandError, InvalidGitRepositoryError |
|
|
| import config |
|
|
| from ..logging import LOGGER |
|
|
|
|
| def install_req(cmd: str) -> Tuple[str, str, int, int]: |
| async def install_requirements(): |
| args = shlex.split(cmd) |
| process = await asyncio.create_subprocess_exec( |
| *args, |
| stdout=asyncio.subprocess.PIPE, |
| stderr=asyncio.subprocess.PIPE, |
| ) |
| stdout, stderr = await process.communicate() |
| return ( |
| stdout.decode("utf-8", "replace").strip(), |
| stderr.decode("utf-8", "replace").strip(), |
| process.returncode, |
| process.pid, |
| ) |
|
|
| return asyncio.get_event_loop().run_until_complete(install_requirements()) |
|
|
|
|
| def git(): |
| REPO_LINK = config.UPSTREAM_REPO |
| if config.GIT_TOKEN: |
| GIT_USERNAME = REPO_LINK.split("com/")[1].split("/")[0] |
| TEMP_REPO = REPO_LINK.split("https://")[1] |
| UPSTREAM_REPO = f"https://{GIT_USERNAME}:{config.GIT_TOKEN}@{TEMP_REPO}" |
| else: |
| UPSTREAM_REPO = config.UPSTREAM_REPO |
| try: |
| repo = Repo() |
| LOGGER(__name__).info(f"Git Client Found [VPS DEPLOYER]") |
| except GitCommandError: |
| LOGGER(__name__).info(f"Invalid Git Command") |
| except InvalidGitRepositoryError: |
| repo = Repo.init() |
| if "origin" in repo.remotes: |
| origin = repo.remote("origin") |
| else: |
| origin = repo.create_remote("origin", UPSTREAM_REPO) |
| origin.fetch() |
| repo.create_head( |
| config.UPSTREAM_BRANCH, |
| origin.refs[config.UPSTREAM_BRANCH], |
| ) |
| repo.heads[config.UPSTREAM_BRANCH].set_tracking_branch( |
| origin.refs[config.UPSTREAM_BRANCH] |
| ) |
| repo.heads[config.UPSTREAM_BRANCH].checkout(True) |
| try: |
| repo.create_remote("origin", config.UPSTREAM_REPO) |
| except BaseException: |
| pass |
| nrs = repo.remote("origin") |
| nrs.fetch(config.UPSTREAM_BRANCH) |
| try: |
| nrs.pull(config.UPSTREAM_BRANCH) |
| except GitCommandError: |
| repo.git.reset("--hard", "FETCH_HEAD") |
| install_req("pip3 install --no-cache-dir -r requirements.txt") |
| LOGGER(__name__).info(f"Fetching updates from upstream repository...") |
|
|