From a55628ce35a7484161676ac971d33a7c4a22ca37 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Tue, 7 Oct 2025 00:34:39 +0200 Subject: [PATCH] VCS service --- app/services/vcs.py | 28 ++++++++++++++++++++++++++++ pyproject.toml | 1 + 2 files changed, 29 insertions(+) diff --git a/app/services/vcs.py b/app/services/vcs.py index e69de29..c137108 100644 --- a/app/services/vcs.py +++ b/app/services/vcs.py @@ -0,0 +1,28 @@ +from git import Repo, Remote + +from app.config import get_settings + + +class GitService: + def __init__(self): + self._settings = get_settings() + self._repo = Repo(self._settings.git.directory) + self._origin: Remote = self._repo.remotes.origin + + def get_modified_compose(self) -> str | None: + self._update() + return self._diff() + + def _update(self): + self._origin.pull() + + def _diff(self) -> str | None: + diff = self._repo.head.commit.diff("HEAD~1") + composes = [f for f in diff if f.a_path.endswith("docker-compose.yml")] + match len(composes): + case 0: + return None + case 1: + return composes[0].a_path + case _: + raise Exception("Multiple compose files modified") diff --git a/pyproject.toml b/pyproject.toml index c7db9ab..1b8f359 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ dependencies = [ "jinja2>=3.1.4", "pydantic-settings>=2.4.0", "pyyaml>=6.0.2", + "gitpython>=3.1.45" ] [project.optional-dependencies]