refactor: move helper functions to separate module

🤖
This commit is contained in:
Sebastian Mark 2023-12-19 23:18:24 +01:00
parent 7ca3da52d9
commit 72611fe619
3 changed files with 63 additions and 59 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
config.yml config.yml
**/__pycache__

61
dc-ops
View file

@ -6,11 +6,11 @@
# for civil use only # for civil use only
import logging as log import logging as log
import subprocess
from pathlib import Path from pathlib import Path
import yaml import yaml
from git import GitCommandError, NoSuchPathError, Repo
from lib.helper import run_subprocess, update_git_repo
# read config file # read config file
configfile = Path(__file__).with_name("config.yml") configfile = Path(__file__).with_name("config.yml")
@ -21,63 +21,6 @@ with configfile.open("r") as f:
loglevel = cfg.get("loglevel", "INFO").upper() loglevel = cfg.get("loglevel", "INFO").upper()
log.basicConfig(format="%(message)s", level=loglevel) log.basicConfig(format="%(message)s", level=loglevel)
def run_subprocess(command: str, workdir: str) -> bool:
"""execute subprocess and print output
Args:
cmd (str): command
cwd (str): working directory
Returns:
bool: False if subprocess fails
"""
try:
subprocess.run(command, cwd=workdir, shell=True, text=True)
except subprocess.CalledProcessError:
return False
return True
def update_git_repo(repo: str) -> bool:
"""update repo and check for new commits
Args:
repo (str): path to git repo
Returns:
bool: False if any step fails
"""
# create repo instance if it exists
try:
repo = Repo(stackdir)
except NoSuchPathError:
log.error("directory not found")
return False
# try to fetch latest changes
try:
repo.git.fetch()
except GitCommandError as e:
log.error(str(e))
return False
# check for new commits
if repo.rev_parse("HEAD") == repo.rev_parse(f"origin/{repo.active_branch}"):
log.info("no changes - skipping")
return False
# pull remote changes to local branch
try:
log.info(repo.git.pull())
except GitCommandError as e:
log.error(str(e))
return False
return True
# iterate all stacks # iterate all stacks
for stack in cfg["stacks"]: for stack in cfg["stacks"]:
# skip disabled stacks # skip disabled stacks

60
lib/helper.py Normal file
View file

@ -0,0 +1,60 @@
import logging as log
import subprocess
import git
def run_subprocess(command: str, workdir: str) -> bool:
"""execute subprocess and print output
Args:
cmd (str): command
cwd (str): working directory
Returns:
bool: False if subprocess fails
"""
try:
subprocess.run(command, cwd=workdir, shell=True, text=True)
except subprocess.CalledProcessError:
return False
return True
def update_git_repo(repo: str) -> bool:
"""update repo and check for new commits
Args:
repo (str): path to git repo
Returns:
bool: False if any step fails
"""
# create repo instance if it exists
try:
repo = git.Repo(repo)
except git.exc.NoSuchPathError:
log.error("directory not found")
return False
# try to fetch latest changes
try:
repo.git.fetch()
except git.exc.GitCommandError as e:
log.error(str(e))
return False
# check for new commits
if repo.rev_parse("HEAD") == repo.rev_parse(f"origin/{repo.active_branch}"):
log.info("no changes - skipping")
return False
# pull remote changes to local branch
try:
log.info(repo.git.pull())
except git.exc.GitCommandError as e:
log.error(str(e))
return False
return True