refactor: move helper functions to separate module
🤖
This commit is contained in:
parent
7ca3da52d9
commit
72611fe619
3 changed files with 63 additions and 59 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
config.yml
|
config.yml
|
||||||
|
**/__pycache__
|
||||||
|
|
61
dc-ops
61
dc-ops
|
@ -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
60
lib/helper.py
Normal 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
|
Loading…
Reference in a new issue