diff --git a/.gitignore b/.gitignore index 06c7873..52364cd 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,6 @@ uv.lock **/*.kdbx* .compose_repository -deployment/ +__pycache__/ **/dist/ **/*.log diff --git a/src/karl/api/v1.py b/src/karl/api/v1.py index 8a529ab..de85719 100644 --- a/src/karl/api/v1.py +++ b/src/karl/api/v1.py @@ -8,7 +8,8 @@ from starlette.responses import JSONResponse, Response from karl.api.models import Request from karl.core.injects import AutowireSupport -from karl.model.webhook import WoodpeckerEvent, ReloadEvent +from karl.core.woodpecker import Woodpecker +from karl.model.webhook import WoodpeckerEvent router = APIRouter() logger = logging.getLogger(__name__) @@ -20,6 +21,7 @@ async def root(): @cbv(router) class APIv1: + woodpecker: Woodpecker = Depends(AutowireSupport.woodpecker) bus: EventBus = Depends(AutowireSupport.bus) def __init__(self): @@ -37,10 +39,3 @@ class APIv1: async def ci(self, request: Request): await self.bus.dispatch(mapper.map(request)) return Response(status_code=201) - - @router.get("/reload", summary="Manual service reload") - async def reload(self, service: str = None) -> Response: - if service is None: - return Response(status_code=400) - await self.bus.dispatch(ReloadEvent(service=service)) - return Response(status_code=201) diff --git a/src/karl/config/settings.py b/src/karl/config/settings.py index 8e20b51..79e66c9 100644 --- a/src/karl/config/settings.py +++ b/src/karl/config/settings.py @@ -51,8 +51,4 @@ class Settings(BaseSettings): @lru_cache def get_settings() -> Settings: - paths = ['deployment/config.yaml', 'config/config.yaml'] - for path in paths: - if Path(path).exists(): - return Settings.from_yaml(path) - raise Exception("Config file not found") + return Settings.from_yaml() diff --git a/src/karl/core/injects.py b/src/karl/core/injects.py index b52451b..34a6280 100644 --- a/src/karl/core/injects.py +++ b/src/karl/core/injects.py @@ -1,7 +1,6 @@ from bubus import EventBus from injectable import inject -from karl.core.reload import ReloadService from karl.core.woodpecker import Woodpecker @@ -11,10 +10,6 @@ class AutowireSupport: def woodpecker(): return inject(Woodpecker) - @staticmethod - def reload(): - return inject(ReloadService) - @staticmethod def bus(): return inject(EventBus) diff --git a/src/karl/core/reload.py b/src/karl/core/reload.py deleted file mode 100644 index 4a8bcbd..0000000 --- a/src/karl/core/reload.py +++ /dev/null @@ -1,34 +0,0 @@ -import logging -from datetime import datetime -from typing import Annotated - -from bubus import EventBus -from injectable import injectable, autowired, Autowired - -from model.webhook import ReloadEvent, WoodpeckerEvent -from services import GitService - -logger = logging.getLogger(__name__) - - -@injectable(singleton=True) -class ReloadService: - - @autowired - def __init__(self, bus: Annotated[EventBus, Autowired]): - self._bus = bus - self._git = GitService() - bus.on(ReloadEvent, self.on_reload) - logger.info("ReloadService initialized.") - - async def on_reload(self, event: ReloadEvent): - logger.info(f"Received ReloadEvent: {event.service}") - head = self._git.get_head() - await self._bus.dispatch(WoodpeckerEvent( - _id=-1, - commit=head.sha, - ref=head.branch, - message=f"Manual reload of {event.service}", - started=int(datetime.now().timestamp()), - files=[f"compose/{event.service}/docker-compose.yml"] - )) diff --git a/src/karl/main.py b/src/karl/main.py index 25029ac..fc75ec3 100644 --- a/src/karl/main.py +++ b/src/karl/main.py @@ -3,7 +3,6 @@ import logging from fastapi import FastAPI from injectable import load_injection_container -from core.injects import AutowireSupport from karl.config import get_settings from karl.util.logging import HandlerFactory @@ -16,7 +15,7 @@ class KarlApplication: _app = FastAPI(title="Karl", version="0.1.0") self._set_middlewares(_app) self._set_routes(_app) - self._init_services(_app) + self._set_events(_app) self._app = _app @@ -56,9 +55,8 @@ class KarlApplication: app.include_router(api_v1_router, prefix="/api/v1", tags=["v1"]) pass - def _init_services(self, app: FastAPI): - AutowireSupport.reload() - AutowireSupport.woodpecker() + def _set_events(self, app: FastAPI): + pass def run(): diff --git a/src/karl/model/vcs.py b/src/karl/model/vcs.py deleted file mode 100644 index 80800bc..0000000 --- a/src/karl/model/vcs.py +++ /dev/null @@ -1,7 +0,0 @@ -from dataclasses import dataclass - - -@dataclass -class Head: - sha: str - branch: str diff --git a/src/karl/model/webhook.py b/src/karl/model/webhook.py index 5b44d46..6c941ae 100644 --- a/src/karl/model/webhook.py +++ b/src/karl/model/webhook.py @@ -10,6 +10,3 @@ class WoodpeckerEvent(BaseEvent): message: str started: int files: List[str] - -class ReloadEvent(BaseEvent): - service: str diff --git a/src/karl/services/vcs.py b/src/karl/services/vcs.py index 0d70139..e89836d 100644 --- a/src/karl/services/vcs.py +++ b/src/karl/services/vcs.py @@ -2,7 +2,6 @@ from git import Repo, Remote from injectable import injectable from karl.config import GitConfig, get_settings -from model.vcs import Head @injectable(singleton=True) @@ -28,11 +27,3 @@ class GitService: def checkout(self, sha: str): self._origin.fetch() self._repo.git.checkout(sha) - - def get_head(self) -> Head: - if self._repo.head.is_detached: - return Head(self._repo.head.object.hexsha, "detached") - return Head( - self._repo.active_branch.commit.hexsha, - self._repo.active_branch.name - )