feat: manual reload
This commit is contained in:
parent
dfb4de6288
commit
e0bc04770b
5 changed files with 54 additions and 1 deletions
|
|
@ -9,7 +9,7 @@ from starlette.responses import JSONResponse, Response
|
|||
from karl.api.models import Request
|
||||
from karl.core.injects import AutowireSupport
|
||||
from karl.core.woodpecker import Woodpecker
|
||||
from karl.model.webhook import WoodpeckerEvent
|
||||
from karl.model.webhook import WoodpeckerEvent, ReloadEvent
|
||||
|
||||
router = APIRouter()
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -39,3 +39,10 @@ class APIv1:
|
|||
async def ci(self, request: Request):
|
||||
await self.bus.dispatch(mapper.map(request))
|
||||
return Response(status_code=201)
|
||||
|
||||
@router.post("/reload", summary="Manual service reload")
|
||||
async def reload(self, service: str = None):
|
||||
if service is None:
|
||||
return Response(status_code=400)
|
||||
await self.bus.dispatch(ReloadEvent(service=service))
|
||||
return Response(status_code=201)
|
||||
|
|
|
|||
7
src/karl/model/vcs.py
Normal file
7
src/karl/model/vcs.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class Head:
|
||||
sha: str
|
||||
branch: str
|
||||
|
|
@ -10,3 +10,6 @@ class WoodpeckerEvent(BaseEvent):
|
|||
message: str
|
||||
started: int
|
||||
files: List[str]
|
||||
|
||||
class ReloadEvent(BaseEvent):
|
||||
service: str
|
||||
|
|
|
|||
29
src/karl/services/reload.py
Normal file
29
src/karl/services/reload.py
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
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
|
||||
|
||||
|
||||
@injectable(singleton=True)
|
||||
class ReloadService:
|
||||
|
||||
@autowired
|
||||
def __init__(self, bus: Annotated[EventBus, Autowired]):
|
||||
self._bus = bus
|
||||
self._bus.on(ReloadEvent, self.on_reload)
|
||||
self._git = GitService()
|
||||
|
||||
def on_reload(self, event: ReloadEvent):
|
||||
head = self._git.get_head()
|
||||
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"]
|
||||
))
|
||||
|
|
@ -2,6 +2,7 @@ from git import Repo, Remote
|
|||
from injectable import injectable
|
||||
|
||||
from karl.config import GitConfig, get_settings
|
||||
from model.vcs import Head
|
||||
|
||||
|
||||
@injectable(singleton=True)
|
||||
|
|
@ -27,3 +28,9 @@ class GitService:
|
|||
def checkout(self, sha: str):
|
||||
self._origin.fetch()
|
||||
self._repo.git.checkout(sha)
|
||||
|
||||
def get_head(self) -> Head:
|
||||
return Head(
|
||||
self._repo.active_branch.commit.hexsha,
|
||||
self._repo.active_branch.name
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue