|
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...") |
|
|