40 lines
968 B
Python
40 lines
968 B
Python
from pydantic import AnyHttpUrl
|
|
from pathlib import Path
|
|
from git import Repo
|
|
import logging
|
|
import shutil
|
|
import os
|
|
from configparser import ConfigParser
|
|
from runner_script import RunnerScript
|
|
|
|
|
|
# load default values
|
|
config = ConfigParser()
|
|
config.read(Path(__file__).parent / 'defaults.ini')
|
|
REPO_DIR = config.get('main', 'repo_dir')
|
|
|
|
|
|
def clone_repository(
|
|
repo_url: AnyHttpUrl,
|
|
repo_dir: str = REPO_DIR
|
|
) -> Path:
|
|
# extract repo name
|
|
repo_name = repo_url.split('/')[-1].replace('.git', '')
|
|
dst_dir = Path(repo_dir) / repo_name
|
|
# prepare repo download dir
|
|
if dst_dir.exists():
|
|
shutil.rmtree(dst_dir)
|
|
dst_dir.mkdir()
|
|
# git clone repo
|
|
Repo.clone_from(url=repo_url, to_path=dst_dir)
|
|
logging.debug('finished')
|
|
return dst_dir
|
|
|
|
|
|
def execute_runner_script(path: Path) -> None:
|
|
rs = RunnerScript.from_file(path)
|
|
for cmd in rs['script']:
|
|
print(cmd)
|
|
os.system(cmd)
|
|
logging.debug('finished')
|